From 05ceb96ca9eadef6b85cc9c4e62864b6087763e5 Mon Sep 17 00:00:00 2001 From: Andrey Kaferi Date: Mon, 5 Aug 2019 16:53:30 +0300 Subject: [PATCH] Update to v19.7 --- README.md | 74 +- asposepdfcloud/__init__.py | 22 +- asposepdfcloud/api_client.py | 37 +- asposepdfcloud/apis/__init__.py | 2 +- asposepdfcloud/apis/pdf_api.py | 8283 +++++++++++------ asposepdfcloud/configuration.py | 11 +- asposepdfcloud/models/__init__.py | 22 +- asposepdfcloud/models/annotation.py | 7 +- asposepdfcloud/models/annotation_flags.py | 2 +- asposepdfcloud/models/annotation_info.py | 12 +- asposepdfcloud/models/annotation_state.py | 2 +- asposepdfcloud/models/annotation_type.py | 2 +- asposepdfcloud/models/annotations_info.py | 2 +- .../models/annotations_info_response.py | 2 +- .../models/antialiasing_processing_type.py | 2 +- asposepdfcloud/models/aspose_response.py | 2 +- asposepdfcloud/models/attachment.py | 7 +- asposepdfcloud/models/attachment_response.py | 2 +- asposepdfcloud/models/attachments.py | 2 +- asposepdfcloud/models/attachments_response.py | 2 +- asposepdfcloud/models/bookmark.py | 590 ++ asposepdfcloud/models/bookmark_response.py | 199 + asposepdfcloud/models/bookmarks.py | 170 + asposepdfcloud/models/bookmarks_response.py | 199 + asposepdfcloud/models/border_corner_style.py | 2 +- asposepdfcloud/models/border_info.py | 2 +- asposepdfcloud/models/cap_style.py | 2 +- asposepdfcloud/models/caption_position.py | 2 +- asposepdfcloud/models/caret_annotation.py | 7 +- .../models/caret_annotation_response.py | 2 +- asposepdfcloud/models/caret_annotations.py | 2 +- .../models/caret_annotations_response.py | 2 +- asposepdfcloud/models/caret_symbol.py | 2 +- asposepdfcloud/models/cell.py | 2 +- asposepdfcloud/models/cell_recognized.py | 6 +- asposepdfcloud/models/circle_annotation.py | 7 +- .../models/circle_annotation_response.py | 2 +- asposepdfcloud/models/circle_annotations.py | 2 +- .../models/circle_annotations_response.py | 2 +- asposepdfcloud/models/color.py | 2 +- asposepdfcloud/models/color_depth.py | 2 +- asposepdfcloud/models/column_adjustment.py | 2 +- .../models/common_figure_annotation.py | 7 +- asposepdfcloud/models/compression_type.py | 2 +- asposepdfcloud/models/crypto_algorithm.py | 2 +- asposepdfcloud/models/disc_usage.py | 6 +- asposepdfcloud/models/doc_format.py | 2 +- asposepdfcloud/models/doc_recognition_mode.py | 2 +- asposepdfcloud/models/document.py | 2 +- .../models/document_page_response.py | 2 +- .../models/document_pages_response.py | 2 +- asposepdfcloud/models/document_privilege.py | 2 +- asposepdfcloud/models/document_properties.py | 2 +- .../models/document_properties_response.py | 2 +- asposepdfcloud/models/document_property.py | 7 +- .../models/document_property_response.py | 2 +- asposepdfcloud/models/document_response.py | 2 +- .../models/epub_recognition_mode.py | 2 +- asposepdfcloud/models/error.py | 226 + asposepdfcloud/models/error_details.py | 171 + asposepdfcloud/models/field.py | 7 +- asposepdfcloud/models/field_response.py | 2 +- asposepdfcloud/models/field_type.py | 2 +- asposepdfcloud/models/fields.py | 7 +- asposepdfcloud/models/fields_response.py | 2 +- .../models/file_attachment_annotation.py | 7 +- .../file_attachment_annotation_response.py | 2 +- .../models/file_attachment_annotations.py | 2 +- .../file_attachment_annotations_response.py | 2 +- asposepdfcloud/models/file_icon.py | 2 +- asposepdfcloud/models/file_version.py | 21 +- asposepdfcloud/models/file_versions.py | 142 + asposepdfcloud/models/files_list.py | 142 + asposepdfcloud/models/files_upload_result.py | 170 + asposepdfcloud/models/font_encoding_rules.py | 2 +- asposepdfcloud/models/font_saving_modes.py | 2 +- asposepdfcloud/models/font_styles.py | 2 +- asposepdfcloud/models/free_text_annotation.py | 12 +- .../models/free_text_annotation_response.py | 2 +- .../models/free_text_annotations.py | 2 +- .../models/free_text_annotations_response.py | 2 +- asposepdfcloud/models/free_text_intent.py | 2 +- asposepdfcloud/models/graph_info.py | 10 +- asposepdfcloud/models/highlight_annotation.py | 7 +- .../models/highlight_annotation_response.py | 2 +- .../models/highlight_annotations.py | 2 +- .../models/highlight_annotations_response.py | 2 +- asposepdfcloud/models/horizontal_alignment.py | 2 +- asposepdfcloud/models/html_document_type.py | 2 +- .../models/html_markup_generation_modes.py | 2 +- asposepdfcloud/models/image.py | 17 +- asposepdfcloud/models/image_footer.py | 6 +- asposepdfcloud/models/image_header.py | 6 +- asposepdfcloud/models/image_response.py | 2 +- asposepdfcloud/models/image_src_type.py | 2 +- asposepdfcloud/models/image_stamp.py | 6 +- asposepdfcloud/models/image_template.py | 4 +- .../models/image_templates_request.py | 2 +- asposepdfcloud/models/images.py | 2 +- asposepdfcloud/models/images_response.py | 2 +- asposepdfcloud/models/ink_annotation.py | 7 +- .../models/ink_annotation_response.py | 2 +- asposepdfcloud/models/ink_annotations.py | 2 +- .../models/ink_annotations_response.py | 2 +- asposepdfcloud/models/justification.py | 2 +- .../models/letters_positioning_methods.py | 2 +- asposepdfcloud/models/line_annotation.py | 17 +- .../models/line_annotation_response.py | 2 +- asposepdfcloud/models/line_annotations.py | 2 +- .../models/line_annotations_response.py | 2 +- asposepdfcloud/models/line_ending.py | 2 +- asposepdfcloud/models/line_intent.py | 2 +- asposepdfcloud/models/line_spacing.py | 2 +- asposepdfcloud/models/link.py | 2 +- asposepdfcloud/models/link_action_type.py | 2 +- asposepdfcloud/models/link_annotation.py | 24 +- .../models/link_annotation_response.py | 2 +- asposepdfcloud/models/link_annotations.py | 2 +- .../models/link_annotations_response.py | 2 +- asposepdfcloud/models/link_element.py | 2 +- .../models/link_highlighting_mode.py | 2 +- asposepdfcloud/models/margin_info.py | 2 +- asposepdfcloud/models/markup_annotation.py | 7 +- asposepdfcloud/models/merge_documents.py | 2 +- asposepdfcloud/models/movie_annotation.py | 7 +- .../models/movie_annotation_response.py | 2 +- asposepdfcloud/models/movie_annotations.py | 2 +- .../models/movie_annotations_response.py | 2 +- asposepdfcloud/models/object_exist.py | 172 + asposepdfcloud/models/optimize_options.py | 2 +- asposepdfcloud/models/page.py | 7 +- asposepdfcloud/models/page_number_stamp.py | 6 +- asposepdfcloud/models/page_word_count.py | 2 +- asposepdfcloud/models/pages.py | 2 +- asposepdfcloud/models/paragraph.py | 2 +- .../models/parts_embedding_modes.py | 2 +- asposepdfcloud/models/pdf_a_type.py | 2 +- asposepdfcloud/models/pdf_page_stamp.py | 6 +- asposepdfcloud/models/permissions_flags.py | 2 +- asposepdfcloud/models/point.py | 2 +- asposepdfcloud/models/poly_annotation.py | 12 +- asposepdfcloud/models/poly_intent.py | 2 +- asposepdfcloud/models/poly_line_annotation.py | 12 +- .../models/poly_line_annotation_response.py | 2 +- .../models/poly_line_annotations.py | 2 +- .../models/poly_line_annotations_response.py | 2 +- asposepdfcloud/models/polygon_annotation.py | 12 +- .../models/polygon_annotation_response.py | 2 +- asposepdfcloud/models/polygon_annotations.py | 2 +- .../models/polygon_annotations_response.py | 2 +- asposepdfcloud/models/popup_annotation.py | 7 +- .../models/popup_annotation_response.py | 2 +- .../models/popup_annotation_with_parent.py | 7 +- asposepdfcloud/models/popup_annotations.py | 2 +- .../models/popup_annotations_response.py | 2 +- asposepdfcloud/models/position.py | 2 +- .../models/raster_images_saving_modes.py | 2 +- asposepdfcloud/models/rectangle.py | 2 +- asposepdfcloud/models/redaction_annotation.py | 7 +- .../models/redaction_annotation_response.py | 2 +- .../models/redaction_annotations.py | 2 +- .../models/redaction_annotations_response.py | 2 +- asposepdfcloud/models/rotation.py | 2 +- asposepdfcloud/models/row.py | 2 +- asposepdfcloud/models/row_recognized.py | 2 +- asposepdfcloud/models/screen_annotation.py | 7 +- .../models/screen_annotation_response.py | 2 +- asposepdfcloud/models/screen_annotations.py | 2 +- .../models/screen_annotations_response.py | 2 +- asposepdfcloud/models/segment.py | 4 +- asposepdfcloud/models/shape_type.py | 2 +- asposepdfcloud/models/signature.py | 8 +- asposepdfcloud/models/signature_type.py | 2 +- .../models/signature_verify_response.py | 7 +- asposepdfcloud/models/sound_annotation.py | 11 +- .../models/sound_annotation_response.py | 2 +- asposepdfcloud/models/sound_annotations.py | 2 +- .../models/sound_annotations_response.py | 2 +- asposepdfcloud/models/sound_encoding.py | 2 +- asposepdfcloud/models/sound_icon.py | 2 +- asposepdfcloud/models/split_result.py | 2 +- .../models/split_result_document.py | 7 +- .../models/split_result_response.py | 2 +- asposepdfcloud/models/square_annotation.py | 7 +- .../models/square_annotation_response.py | 2 +- asposepdfcloud/models/square_annotations.py | 2 +- .../models/square_annotations_response.py | 2 +- asposepdfcloud/models/squiggly_annotation.py | 7 +- .../models/squiggly_annotation_response.py | 2 +- asposepdfcloud/models/squiggly_annotations.py | 2 +- .../models/squiggly_annotations_response.py | 2 +- asposepdfcloud/models/stamp.py | 10 +- asposepdfcloud/models/stamp_annotation.py | 7 +- .../models/stamp_annotation_response.py | 2 +- asposepdfcloud/models/stamp_annotations.py | 2 +- .../models/stamp_annotations_response.py | 2 +- asposepdfcloud/models/stamp_base.py | 6 +- asposepdfcloud/models/stamp_icon.py | 2 +- asposepdfcloud/models/stamp_info.py | 7 +- asposepdfcloud/models/stamp_type.py | 2 +- asposepdfcloud/models/stamps_info.py | 2 +- asposepdfcloud/models/stamps_info_response.py | 2 +- asposepdfcloud/models/storage_exist.py | 143 + asposepdfcloud/models/storage_file.py | 256 + .../models/strike_out_annotation.py | 7 +- .../models/strike_out_annotation_response.py | 2 +- .../models/strike_out_annotations.py | 2 +- .../models/strike_out_annotations_response.py | 2 +- asposepdfcloud/models/table.py | 7 +- asposepdfcloud/models/table_broken.py | 2 +- asposepdfcloud/models/table_recognized.py | 2 +- .../models/table_recognized_response.py | 2 +- asposepdfcloud/models/tables_recognized.py | 2 +- .../models/tables_recognized_response.py | 2 +- asposepdfcloud/models/text_annotation.py | 7 +- .../models/text_annotation_response.py | 2 +- asposepdfcloud/models/text_annotations.py | 2 +- .../models/text_annotations_response.py | 2 +- asposepdfcloud/models/text_footer.py | 10 +- asposepdfcloud/models/text_header.py | 10 +- .../models/text_horizontal_alignment.py | 2 +- asposepdfcloud/models/text_icon.py | 2 +- asposepdfcloud/models/text_line.py | 2 +- asposepdfcloud/models/text_rect.py | 14 +- asposepdfcloud/models/text_rects.py | 2 +- asposepdfcloud/models/text_rects_response.py | 2 +- asposepdfcloud/models/text_replace.py | 6 +- .../models/text_replace_list_request.py | 4 +- .../models/text_replace_response.py | 7 +- asposepdfcloud/models/text_stamp.py | 10 +- asposepdfcloud/models/text_state.py | 2 +- asposepdfcloud/models/text_style.py | 2 +- asposepdfcloud/models/underline_annotation.py | 7 +- .../models/underline_annotation_response.py | 2 +- .../models/underline_annotations.py | 2 +- .../models/underline_annotations_response.py | 2 +- asposepdfcloud/models/vertical_alignment.py | 2 +- asposepdfcloud/models/word_count.py | 2 +- asposepdfcloud/models/word_count_response.py | 6 +- asposepdfcloud/models/wrap_mode.py | 2 +- asposepdfcloud/rest.py | 2 +- docs/Annotation.md | 2 +- docs/AnnotationInfo.md | 4 +- docs/Attachment.md | 2 +- docs/Bookmark.md | 27 + docs/BookmarkResponse.md | 13 + docs/Bookmarks.md | 12 + docs/BookmarksResponse.md | 13 + docs/CaretAnnotation.md | 2 +- docs/CellRecognized.md | 2 +- docs/CircleAnnotation.md | 2 +- docs/CommonFigureAnnotation.md | 2 +- docs/DiscUsage.md | 6 +- docs/DocumentPrivilege.md | 2 +- docs/DocumentProperty.md | 2 +- docs/Error.md | 14 + docs/ErrorDetails.md | 12 + docs/Field.md | 2 +- docs/Fields.md | 2 +- docs/FileAttachmentAnnotation.md | 2 +- docs/FileVersion.md | 16 +- docs/FileVersions.md | 11 + docs/FilesList.md | 11 + docs/FilesUploadResult.md | 12 + docs/FreeTextAnnotation.md | 4 +- docs/GraphInfo.md | 4 +- docs/HighlightAnnotation.md | 2 +- docs/Image.md | 6 +- docs/ImageFooter.md | 2 +- docs/ImageHeader.md | 2 +- docs/ImageStamp.md | 2 +- docs/InkAnnotation.md | 2 +- docs/LineAnnotation.md | 6 +- docs/LinkAnnotation.md | 8 +- docs/MarkupAnnotation.md | 2 +- docs/MovieAnnotation.md | 2 +- docs/ObjectExist.md | 12 + docs/Page.md | 2 +- docs/PageNumberStamp.md | 2 +- docs/PdfApi.md | 1137 ++- docs/PdfPageStamp.md | 2 +- docs/PolyAnnotation.md | 4 +- docs/PolyLineAnnotation.md | 4 +- docs/PolygonAnnotation.md | 4 +- docs/PopupAnnotation.md | 2 +- docs/PopupAnnotationWithParent.md | 2 +- docs/RedactionAnnotation.md | 2 +- docs/ScreenAnnotation.md | 2 +- docs/Signature.md | 2 +- docs/SignatureVerifyResponse.md | 2 +- docs/SoundAnnotation.md | 4 +- docs/SplitResultDocument.md | 2 +- docs/SquareAnnotation.md | 2 +- docs/SquigglyAnnotation.md | 2 +- docs/Stamp.md | 4 +- docs/StampAnnotation.md | 2 +- docs/StampBase.md | 2 +- docs/StampInfo.md | 2 +- docs/StorageExist.md | 11 + docs/StorageFile.md | 15 + docs/StrikeOutAnnotation.md | 2 +- docs/Table.md | 2 +- docs/TextAnnotation.md | 2 +- docs/TextFooter.md | 4 +- docs/TextHeader.md | 4 +- docs/TextRect.md | 6 +- docs/TextReplaceListRequest.md | 2 +- docs/TextReplaceResponse.md | 2 +- docs/TextStamp.md | 4 +- docs/UnderlineAnnotation.md | 2 +- docs/WordCountResponse.md | 2 +- setup.py | 4 +- test/pdf_tests.py | 884 +- test/setup.json | 2 +- test_data/FormData.fdf | Bin 0 -> 1486 bytes test_data/FormData.pdf | Bin 0 -> 443345 bytes test_data/FormDataXfa_in.pdf | Bin 0 -> 82703 bytes test_data/FormDataXfa_in.xml | 8 + test_data/FormDataXfdf_in.pdf | Bin 0 -> 74193 bytes test_data/FormDataXfdf_in.xfdf | 21 + test_data/sample.tex | 105 + 321 files changed, 10516 insertions(+), 3834 deletions(-) create mode 100644 asposepdfcloud/models/bookmark.py create mode 100644 asposepdfcloud/models/bookmark_response.py create mode 100644 asposepdfcloud/models/bookmarks.py create mode 100644 asposepdfcloud/models/bookmarks_response.py create mode 100644 asposepdfcloud/models/error.py create mode 100644 asposepdfcloud/models/error_details.py create mode 100644 asposepdfcloud/models/file_versions.py create mode 100644 asposepdfcloud/models/files_list.py create mode 100644 asposepdfcloud/models/files_upload_result.py create mode 100644 asposepdfcloud/models/object_exist.py create mode 100644 asposepdfcloud/models/storage_exist.py create mode 100644 asposepdfcloud/models/storage_file.py create mode 100644 docs/Bookmark.md create mode 100644 docs/BookmarkResponse.md create mode 100644 docs/Bookmarks.md create mode 100644 docs/BookmarksResponse.md create mode 100644 docs/Error.md create mode 100644 docs/ErrorDetails.md create mode 100644 docs/FileVersions.md create mode 100644 docs/FilesList.md create mode 100644 docs/FilesUploadResult.md create mode 100644 docs/ObjectExist.md create mode 100644 docs/StorageExist.md create mode 100644 docs/StorageFile.md create mode 100644 test_data/FormData.fdf create mode 100644 test_data/FormData.pdf create mode 100644 test_data/FormDataXfa_in.pdf create mode 100644 test_data/FormDataXfa_in.xml create mode 100644 test_data/FormDataXfdf_in.pdf create mode 100644 test_data/FormDataXfdf_in.xfdf create mode 100644 test_data/sample.tex diff --git a/README.md b/README.md index a50e78d..ea6bd1a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Aspose.PDF Cloud -- API version: 2.0 -- Package version: 19.5.0 +- API version: 3.0 +- Package version: 19.7.0 [Aspose.PDF Cloud](https://products.aspose.cloud/pdf) is a true REST API that enables you to perform a wide range of document processing operations including creation, manipulation, conversion and rendering of Pdf documents in the cloud. @@ -91,18 +91,23 @@ All Aspose.PDF Cloud SDKs are licensed under [MIT License](LICENSE). ## Documentation for API Endpoints -All URIs are relative to *https://api.aspose.cloud/v2.0/* +All URIs are relative to *https://api.aspose.cloud/v3.0/* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- +*PdfApi* | [**copy_file**](docs/PdfApi.md#copy_file) | **PUT** /pdf/storage/file/copy/\{srcPath} | Copy file +*PdfApi* | [**copy_folder**](docs/PdfApi.md#copy_folder) | **PUT** /pdf/storage/folder/copy/\{srcPath} | Copy folder +*PdfApi* | [**create_folder**](docs/PdfApi.md#create_folder) | **PUT** /pdf/storage/folder/\{path} | Create the folder *PdfApi* | [**delete_annotation**](docs/PdfApi.md#delete_annotation) | **DELETE** /pdf/\{name}/annotations/\{annotationId} | Delete document annotation by ID +*PdfApi* | [**delete_bookmark**](docs/PdfApi.md#delete_bookmark) | **DELETE** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Delete document bookmark by ID. *PdfApi* | [**delete_document_annotations**](docs/PdfApi.md#delete_document_annotations) | **DELETE** /pdf/\{name}/annotations | Delete all annotations from the document +*PdfApi* | [**delete_document_bookmarks**](docs/PdfApi.md#delete_document_bookmarks) | **DELETE** /pdf/\{name}/bookmarks/tree | Delete all document bookmarks. *PdfApi* | [**delete_document_link_annotations**](docs/PdfApi.md#delete_document_link_annotations) | **DELETE** /pdf/\{name}/links | Delete all link annotations from the document *PdfApi* | [**delete_document_stamps**](docs/PdfApi.md#delete_document_stamps) | **DELETE** /pdf/\{name}/stamps | Delete all stamps from the document *PdfApi* | [**delete_document_tables**](docs/PdfApi.md#delete_document_tables) | **DELETE** /pdf/\{name}/tables | Delete all tables from the document *PdfApi* | [**delete_field**](docs/PdfApi.md#delete_field) | **DELETE** /pdf/\{name}/fields/\{fieldName} | Delete document field by name. -*PdfApi* | [**delete_file**](docs/PdfApi.md#delete_file) | **DELETE** /storage/file | Remove a specific file -*PdfApi* | [**delete_folder**](docs/PdfApi.md#delete_folder) | **DELETE** /storage/folder | Remove a specific folder +*PdfApi* | [**delete_file**](docs/PdfApi.md#delete_file) | **DELETE** /pdf/storage/file/\{path} | Delete file +*PdfApi* | [**delete_folder**](docs/PdfApi.md#delete_folder) | **DELETE** /pdf/storage/folder/\{path} | Delete folder *PdfApi* | [**delete_image**](docs/PdfApi.md#delete_image) | **DELETE** /pdf/\{name}/images/\{imageId} | Delete image from document page. *PdfApi* | [**delete_link_annotation**](docs/PdfApi.md#delete_link_annotation) | **DELETE** /pdf/\{name}/links/\{linkId} | Delete document page link annotation by ID *PdfApi* | [**delete_page**](docs/PdfApi.md#delete_page) | **DELETE** /pdf/\{name}/pages/\{pageNumber} | Delete document page by its number. @@ -114,13 +119,17 @@ Class | Method | HTTP request | Description *PdfApi* | [**delete_property**](docs/PdfApi.md#delete_property) | **DELETE** /pdf/\{name}/documentproperties/\{propertyName} | Delete document property. *PdfApi* | [**delete_stamp**](docs/PdfApi.md#delete_stamp) | **DELETE** /pdf/\{name}/stamps/\{stampId} | Delete document stamp by ID *PdfApi* | [**delete_table**](docs/PdfApi.md#delete_table) | **DELETE** /pdf/\{name}/tables/\{tableId} | Delete document table by ID +*PdfApi* | [**download_file**](docs/PdfApi.md#download_file) | **GET** /pdf/storage/file/\{path} | Download file +*PdfApi* | [**get_bookmark**](docs/PdfApi.md#get_bookmark) | **GET** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Read document bookmark. +*PdfApi* | [**get_bookmarks**](docs/PdfApi.md#get_bookmarks) | **GET** /pdf/\{name}/bookmarks/list/\{bookmarkPath} | Read document bookmarks node list. *PdfApi* | [**get_caret_annotation**](docs/PdfApi.md#get_caret_annotation) | **GET** /pdf/\{name}/annotations/caret/\{annotationId} | Read document page caret annotation by ID. *PdfApi* | [**get_circle_annotation**](docs/PdfApi.md#get_circle_annotation) | **GET** /pdf/\{name}/annotations/circle/\{annotationId} | Read document page circle annotation by ID. -*PdfApi* | [**get_disc_usage**](docs/PdfApi.md#get_disc_usage) | **GET** /storage/disc | Check the disk usage of the current account +*PdfApi* | [**get_disc_usage**](docs/PdfApi.md#get_disc_usage) | **GET** /pdf/storage/disc | Get disc usage *PdfApi* | [**get_document**](docs/PdfApi.md#get_document) | **GET** /pdf/\{name} | Read common document info. *PdfApi* | [**get_document_annotations**](docs/PdfApi.md#get_document_annotations) | **GET** /pdf/\{name}/annotations | Read documant page annotations. Returns only FreeTextAnnotations, TextAnnotations, other annotations will implemented next releases. *PdfApi* | [**get_document_attachment_by_index**](docs/PdfApi.md#get_document_attachment_by_index) | **GET** /pdf/\{name}/attachments/\{attachmentIndex} | Read document attachment info by its index. *PdfApi* | [**get_document_attachments**](docs/PdfApi.md#get_document_attachments) | **GET** /pdf/\{name}/attachments | Read document attachments info. +*PdfApi* | [**get_document_bookmarks**](docs/PdfApi.md#get_document_bookmarks) | **GET** /pdf/\{name}/bookmarks/tree | Read document bookmarks tree. *PdfApi* | [**get_document_caret_annotations**](docs/PdfApi.md#get_document_caret_annotations) | **GET** /pdf/\{name}/annotations/caret | Read document caret annotations. *PdfApi* | [**get_document_circle_annotations**](docs/PdfApi.md#get_document_circle_annotations) | **GET** /pdf/\{name}/annotations/circle | Read document circle annotations. *PdfApi* | [**get_document_file_attachment_annotations**](docs/PdfApi.md#get_document_file_attachment_annotations) | **GET** /pdf/\{name}/annotations/fileattachment | Read document FileAttachment annotations. @@ -146,13 +155,17 @@ Class | Method | HTTP request | Description *PdfApi* | [**get_document_tables**](docs/PdfApi.md#get_document_tables) | **GET** /pdf/\{name}/tables | Read document tables. *PdfApi* | [**get_document_text_annotations**](docs/PdfApi.md#get_document_text_annotations) | **GET** /pdf/\{name}/annotations/text | Read document text annotations. *PdfApi* | [**get_document_underline_annotations**](docs/PdfApi.md#get_document_underline_annotations) | **GET** /pdf/\{name}/annotations/underline | Read document underline annotations. -*PdfApi* | [**get_download**](docs/PdfApi.md#get_download) | **GET** /storage/file | Download a specific file *PdfApi* | [**get_download_document_attachment_by_index**](docs/PdfApi.md#get_download_document_attachment_by_index) | **GET** /pdf/\{name}/attachments/\{attachmentIndex}/download | Download document attachment content by its index. *PdfApi* | [**get_epub_in_storage_to_pdf**](docs/PdfApi.md#get_epub_in_storage_to_pdf) | **GET** /pdf/create/epub | Convert EPUB file (located on storage) to PDF format and return resulting file in response. +*PdfApi* | [**get_export_fields_from_pdf_to_fdf_in_storage**](docs/PdfApi.md#get_export_fields_from_pdf_to_fdf_in_storage) | **GET** /pdf/\{name}/export/fdf | Export fields from from PDF in storage to FDF file. +*PdfApi* | [**get_export_fields_from_pdf_to_xfdf_in_storage**](docs/PdfApi.md#get_export_fields_from_pdf_to_xfdf_in_storage) | **GET** /pdf/\{name}/export/xfdf | Export fields from from PDF in storage to XFDF file. +*PdfApi* | [**get_export_fields_from_pdf_to_xml_in_storage**](docs/PdfApi.md#get_export_fields_from_pdf_to_xml_in_storage) | **GET** /pdf/\{name}/export/xml | Export fields from from PDF in storage to XML file. *PdfApi* | [**get_field**](docs/PdfApi.md#get_field) | **GET** /pdf/\{name}/fields/\{fieldName} | Get document field by name. *PdfApi* | [**get_fields**](docs/PdfApi.md#get_fields) | **GET** /pdf/\{name}/fields | Get document fields. *PdfApi* | [**get_file_attachment_annotation**](docs/PdfApi.md#get_file_attachment_annotation) | **GET** /pdf/\{name}/annotations/fileattachment/\{annotationId} | Read document page FileAttachment annotation by ID. *PdfApi* | [**get_file_attachment_annotation_data**](docs/PdfApi.md#get_file_attachment_annotation_data) | **GET** /pdf/\{name}/annotations/fileattachment/\{annotationId}/data | Read document page FileAttachment annotation by ID. +*PdfApi* | [**get_file_versions**](docs/PdfApi.md#get_file_versions) | **GET** /pdf/storage/version/\{path} | Get file versions +*PdfApi* | [**get_files_list**](docs/PdfApi.md#get_files_list) | **GET** /pdf/storage/folder/\{path} | Get all files and folders within a folder *PdfApi* | [**get_free_text_annotation**](docs/PdfApi.md#get_free_text_annotation) | **GET** /pdf/\{name}/annotations/freetext/\{annotationId} | Read document page free text annotation by ID. *PdfApi* | [**get_highlight_annotation**](docs/PdfApi.md#get_highlight_annotation) | **GET** /pdf/\{name}/annotations/highlight/\{annotationId} | Read document page highlight annotation by ID. *PdfApi* | [**get_html_in_storage_to_pdf**](docs/PdfApi.md#get_html_in_storage_to_pdf) | **GET** /pdf/create/html | Convert HTML file (located on storage) to PDF format and return resulting file in response. @@ -162,14 +175,13 @@ Class | Method | HTTP request | Description *PdfApi* | [**get_image_extract_as_png**](docs/PdfApi.md#get_image_extract_as_png) | **GET** /pdf/\{name}/images/\{imageId}/extract/png | Extract document image in PNG format *PdfApi* | [**get_image_extract_as_tiff**](docs/PdfApi.md#get_image_extract_as_tiff) | **GET** /pdf/\{name}/images/\{imageId}/extract/tiff | Extract document image in TIFF format *PdfApi* | [**get_images**](docs/PdfApi.md#get_images) | **GET** /pdf/\{name}/pages/\{pageNumber}/images | Read document images. +*PdfApi* | [**get_import_fields_from_fdf_in_storage**](docs/PdfApi.md#get_import_fields_from_fdf_in_storage) | **GET** /pdf/\{name}/import/fdf | Update fields from FDF file in storage. +*PdfApi* | [**get_import_fields_from_xfdf_in_storage**](docs/PdfApi.md#get_import_fields_from_xfdf_in_storage) | **GET** /pdf/\{name}/import/xfdf | Update fields from XFDF file in storage. +*PdfApi* | [**get_import_fields_from_xml_in_storage**](docs/PdfApi.md#get_import_fields_from_xml_in_storage) | **GET** /pdf/\{name}/import/xml | Import from XML file (located on storage) to PDF format and return resulting file in response. *PdfApi* | [**get_ink_annotation**](docs/PdfApi.md#get_ink_annotation) | **GET** /pdf/\{name}/annotations/ink/\{annotationId} | Read document page ink annotation by ID. -*PdfApi* | [**get_is_exist**](docs/PdfApi.md#get_is_exist) | **GET** /storage/exist | Check if a specific file or folder exists -*PdfApi* | [**get_is_storage_exist**](docs/PdfApi.md#get_is_storage_exist) | **GET** /storage/\{name}/exist | Check if storage exists *PdfApi* | [**get_la_te_x_in_storage_to_pdf**](docs/PdfApi.md#get_la_te_x_in_storage_to_pdf) | **GET** /pdf/create/latex | Convert LaTeX file (located on storage) to PDF format and return resulting file in response. *PdfApi* | [**get_line_annotation**](docs/PdfApi.md#get_line_annotation) | **GET** /pdf/\{name}/annotations/line/\{annotationId} | Read document page line annotation by ID. *PdfApi* | [**get_link_annotation**](docs/PdfApi.md#get_link_annotation) | **GET** /pdf/\{name}/links/\{linkId} | Read document link annotation by ID. -*PdfApi* | [**get_list_file_versions**](docs/PdfApi.md#get_list_file_versions) | **GET** /storage/version | Get the file's versions list -*PdfApi* | [**get_list_files**](docs/PdfApi.md#get_list_files) | **GET** /storage/folder | Get the file listing of a specific folder *PdfApi* | [**get_mht_in_storage_to_pdf**](docs/PdfApi.md#get_mht_in_storage_to_pdf) | **GET** /pdf/create/mht | Convert MHT file (located on storage) to PDF format and return resulting file in response. *PdfApi* | [**get_movie_annotation**](docs/PdfApi.md#get_movie_annotation) | **GET** /pdf/\{name}/annotations/movie/\{annotationId} | Read document page movie annotation by ID. *PdfApi* | [**get_page**](docs/PdfApi.md#get_page) | **GET** /pdf/\{name}/pages/\{pageNumber} | Read document page info. @@ -246,7 +258,11 @@ Class | Method | HTTP request | Description *PdfApi* | [**get_xml_in_storage_to_pdf**](docs/PdfApi.md#get_xml_in_storage_to_pdf) | **GET** /pdf/create/xml | Convert XML file (located on storage) to PDF format and return resulting file in response. *PdfApi* | [**get_xps_in_storage_to_pdf**](docs/PdfApi.md#get_xps_in_storage_to_pdf) | **GET** /pdf/create/xps | Convert XPS file (located on storage) to PDF format and return resulting file in response. *PdfApi* | [**get_xsl_fo_in_storage_to_pdf**](docs/PdfApi.md#get_xsl_fo_in_storage_to_pdf) | **GET** /pdf/create/xslfo | Convert XslFo file (located on storage) to PDF format and return resulting file in response. +*PdfApi* | [**move_file**](docs/PdfApi.md#move_file) | **PUT** /pdf/storage/file/move/\{srcPath} | Move file +*PdfApi* | [**move_folder**](docs/PdfApi.md#move_folder) | **PUT** /pdf/storage/folder/move/\{srcPath} | Move folder +*PdfApi* | [**object_exists**](docs/PdfApi.md#object_exists) | **GET** /pdf/storage/exist/\{path} | Check if file or folder exists *PdfApi* | [**post_append_document**](docs/PdfApi.md#post_append_document) | **POST** /pdf/\{name}/appendDocument | Append document to existing one. +*PdfApi* | [**post_bookmark**](docs/PdfApi.md#post_bookmark) | **POST** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Add document bookmarks. *PdfApi* | [**post_change_password_document_in_storage**](docs/PdfApi.md#post_change_password_document_in_storage) | **POST** /pdf/\{name}/changepassword | Change document password in storage. *PdfApi* | [**post_create_field**](docs/PdfApi.md#post_create_field) | **POST** /pdf/\{name}/fields | Create field. *PdfApi* | [**post_decrypt_document_in_storage**](docs/PdfApi.md#post_decrypt_document_in_storage) | **POST** /pdf/\{name}/decrypt | Decrypt document in storage. @@ -258,9 +274,10 @@ Class | Method | HTTP request | Description *PdfApi* | [**post_document_text_replace**](docs/PdfApi.md#post_document_text_replace) | **POST** /pdf/\{name}/text/replace | Document's replace text method. *PdfApi* | [**post_encrypt_document_in_storage**](docs/PdfApi.md#post_encrypt_document_in_storage) | **POST** /pdf/\{name}/encrypt | Encrypt document in storage. *PdfApi* | [**post_flatten_document**](docs/PdfApi.md#post_flatten_document) | **POST** /pdf/\{name}/flatten | Flatten the document. +*PdfApi* | [**post_import_fields_from_fdf**](docs/PdfApi.md#post_import_fields_from_fdf) | **POST** /pdf/\{name}/import/fdf | Update fields from FDF file in request. +*PdfApi* | [**post_import_fields_from_xfdf**](docs/PdfApi.md#post_import_fields_from_xfdf) | **POST** /pdf/\{name}/import/xfdf | Update fields from XFDF file in request. +*PdfApi* | [**post_import_fields_from_xml**](docs/PdfApi.md#post_import_fields_from_xml) | **POST** /pdf/\{name}/import/xml | Update fields from XML file in request. *PdfApi* | [**post_insert_image**](docs/PdfApi.md#post_insert_image) | **POST** /pdf/\{name}/pages/\{pageNumber}/images | Insert image to document page. -*PdfApi* | [**post_move_file**](docs/PdfApi.md#post_move_file) | **POST** /storage/file | Move a specific file -*PdfApi* | [**post_move_folder**](docs/PdfApi.md#post_move_folder) | **POST** /storage/folder | Move a specific folder *PdfApi* | [**post_move_page**](docs/PdfApi.md#post_move_page) | **POST** /pdf/\{name}/pages/\{pageNumber}/movePage | Move page to new position. *PdfApi* | [**post_optimize_document**](docs/PdfApi.md#post_optimize_document) | **POST** /pdf/\{name}/optimize | Optimize document. *PdfApi* | [**post_page_caret_annotations**](docs/PdfApi.md#post_page_caret_annotations) | **POST** /pdf/\{name}/pages/\{pageNumber}/annotations/caret | Add document page caret annotations. @@ -295,15 +312,17 @@ Class | Method | HTTP request | Description *PdfApi* | [**put_add_new_page**](docs/PdfApi.md#put_add_new_page) | **PUT** /pdf/\{name}/pages | Add new page to end of the document. *PdfApi* | [**put_add_text**](docs/PdfApi.md#put_add_text) | **PUT** /pdf/\{name}/pages/\{pageNumber}/text | Add text to PDF document page. *PdfApi* | [**put_annotations_flatten**](docs/PdfApi.md#put_annotations_flatten) | **PUT** /pdf/\{name}/annotations/flatten | Flattens the annotations of the specified types +*PdfApi* | [**put_bookmark**](docs/PdfApi.md#put_bookmark) | **PUT** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Update document bookmark. *PdfApi* | [**put_caret_annotation**](docs/PdfApi.md#put_caret_annotation) | **PUT** /pdf/\{name}/annotations/caret/\{annotationId} | Replace document caret annotation *PdfApi* | [**put_change_password_document**](docs/PdfApi.md#put_change_password_document) | **PUT** /pdf/changepassword | Change document password from content. *PdfApi* | [**put_circle_annotation**](docs/PdfApi.md#put_circle_annotation) | **PUT** /pdf/\{name}/annotations/circle/\{annotationId} | Replace document circle annotation -*PdfApi* | [**put_create**](docs/PdfApi.md#put_create) | **PUT** /storage/file | Upload a specific file *PdfApi* | [**put_create_document**](docs/PdfApi.md#put_create_document) | **PUT** /pdf/\{name} | Create empty document. -*PdfApi* | [**put_create_folder**](docs/PdfApi.md#put_create_folder) | **PUT** /storage/folder | Create the folder *PdfApi* | [**put_decrypt_document**](docs/PdfApi.md#put_decrypt_document) | **PUT** /pdf/decrypt | Decrypt document from content. *PdfApi* | [**put_encrypt_document**](docs/PdfApi.md#put_encrypt_document) | **PUT** /pdf/encrypt | Encrypt document from content. *PdfApi* | [**put_epub_in_storage_to_pdf**](docs/PdfApi.md#put_epub_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/epub | Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. +*PdfApi* | [**put_export_fields_from_pdf_to_fdf_in_storage**](docs/PdfApi.md#put_export_fields_from_pdf_to_fdf_in_storage) | **PUT** /pdf/\{name}/export/fdf | Export fields from from PDF in storage to FDF file in storage. +*PdfApi* | [**put_export_fields_from_pdf_to_xfdf_in_storage**](docs/PdfApi.md#put_export_fields_from_pdf_to_xfdf_in_storage) | **PUT** /pdf/\{name}/export/xfdf | Export fields from from PDF in storage to XFDF file in storage. +*PdfApi* | [**put_export_fields_from_pdf_to_xml_in_storage**](docs/PdfApi.md#put_export_fields_from_pdf_to_xml_in_storage) | **PUT** /pdf/\{name}/export/xml | Export fields from from PDF in storage to XML file in storage. *PdfApi* | [**put_fields_flatten**](docs/PdfApi.md#put_fields_flatten) | **PUT** /pdf/\{name}/fields/flatten | Flatten form fields in document. *PdfApi* | [**put_file_attachment_annotation**](docs/PdfApi.md#put_file_attachment_annotation) | **PUT** /pdf/\{name}/annotations/fileattachment/\{annotationId} | Replace document FileAttachment annotation *PdfApi* | [**put_file_attachment_annotation_data_extract**](docs/PdfApi.md#put_file_attachment_annotation_data_extract) | **PUT** /pdf/\{name}/annotations/fileattachment/\{annotationId}/data/extract | Extract document FileAttachment annotation content to storage @@ -319,6 +338,9 @@ Class | Method | HTTP request | Description *PdfApi* | [**put_images_extract_as_jpeg**](docs/PdfApi.md#put_images_extract_as_jpeg) | **PUT** /pdf/\{name}/pages/\{pageNumber}/images/extract/jpeg | Extract document images in JPEG format to folder. *PdfApi* | [**put_images_extract_as_png**](docs/PdfApi.md#put_images_extract_as_png) | **PUT** /pdf/\{name}/pages/\{pageNumber}/images/extract/png | Extract document images in PNG format to folder. *PdfApi* | [**put_images_extract_as_tiff**](docs/PdfApi.md#put_images_extract_as_tiff) | **PUT** /pdf/\{name}/pages/\{pageNumber}/images/extract/tiff | Extract document images in TIFF format to folder. +*PdfApi* | [**put_import_fields_from_fdf_in_storage**](docs/PdfApi.md#put_import_fields_from_fdf_in_storage) | **PUT** /pdf/\{name}/import/fdf | Update fields from FDF file in storage. +*PdfApi* | [**put_import_fields_from_xfdf_in_storage**](docs/PdfApi.md#put_import_fields_from_xfdf_in_storage) | **PUT** /pdf/\{name}/import/xfdf | Update fields from XFDF file in storage. +*PdfApi* | [**put_import_fields_from_xml_in_storage**](docs/PdfApi.md#put_import_fields_from_xml_in_storage) | **PUT** /pdf/\{name}/import/xml | Update fields from XML file in storage. *PdfApi* | [**put_ink_annotation**](docs/PdfApi.md#put_ink_annotation) | **PUT** /pdf/\{name}/annotations/ink/\{annotationId} | Replace document ink annotation *PdfApi* | [**put_la_te_x_in_storage_to_pdf**](docs/PdfApi.md#put_la_te_x_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/latex | Convert LaTeX file (located on storage) to PDF format and upload resulting file to storage. *PdfApi* | [**put_line_annotation**](docs/PdfApi.md#put_line_annotation) | **PUT** /pdf/\{name}/annotations/line/\{annotationId} | Replace document line annotation @@ -390,6 +412,8 @@ Class | Method | HTTP request | Description *PdfApi* | [**put_xml_in_storage_to_pdf**](docs/PdfApi.md#put_xml_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/xml | Convert XML file (located on storage) to PDF format and upload resulting file to storage. *PdfApi* | [**put_xps_in_storage_to_pdf**](docs/PdfApi.md#put_xps_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/xps | Convert XPS file (located on storage) to PDF format and upload resulting file to storage. *PdfApi* | [**put_xsl_fo_in_storage_to_pdf**](docs/PdfApi.md#put_xsl_fo_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/xslfo | Convert XslFo file (located on storage) to PDF format and upload resulting file to storage. +*PdfApi* | [**storage_exists**](docs/PdfApi.md#storage_exists) | **GET** /pdf/storage/\{storageName}/exist | Check if storage exists +*PdfApi* | [**upload_file**](docs/PdfApi.md#upload_file) | **PUT** /pdf/storage/file/\{path} | Upload file ## Documentation For Models @@ -398,7 +422,6 @@ Class | Method | HTTP request | Description - [AnnotationState](docs/AnnotationState.md) - [AnnotationType](docs/AnnotationType.md) - [AntialiasingProcessingType](docs/AntialiasingProcessingType.md) - - [AppendDocument](docs/AppendDocument.md) - [AsposeResponse](docs/AsposeResponse.md) - [BorderCornerStyle](docs/BorderCornerStyle.md) - [BorderInfo](docs/BorderInfo.md) @@ -417,10 +440,13 @@ Class | Method | HTTP request | Description - [DocRecognitionMode](docs/DocRecognitionMode.md) - [DocumentPrivilege](docs/DocumentPrivilege.md) - [EpubRecognitionMode](docs/EpubRecognitionMode.md) + - [Error](docs/Error.md) + - [ErrorDetails](docs/ErrorDetails.md) - [FieldType](docs/FieldType.md) - - [File](docs/File.md) - - [FileExist](docs/FileExist.md) - [FileIcon](docs/FileIcon.md) + - [FileVersions](docs/FileVersions.md) + - [FilesList](docs/FilesList.md) + - [FilesUploadResult](docs/FilesUploadResult.md) - [FontEncodingRules](docs/FontEncodingRules.md) - [FontSavingModes](docs/FontSavingModes.md) - [FontStyles](docs/FontStyles.md) @@ -443,6 +469,7 @@ Class | Method | HTTP request | Description - [LinkHighlightingMode](docs/LinkHighlightingMode.md) - [MarginInfo](docs/MarginInfo.md) - [MergeDocuments](docs/MergeDocuments.md) + - [ObjectExist](docs/ObjectExist.md) - [OptimizeOptions](docs/OptimizeOptions.md) - [PageWordCount](docs/PageWordCount.md) - [Paragraph](docs/Paragraph.md) @@ -467,6 +494,8 @@ Class | Method | HTTP request | Description - [Stamp](docs/Stamp.md) - [StampIcon](docs/StampIcon.md) - [StampType](docs/StampType.md) + - [StorageExist](docs/StorageExist.md) + - [StorageFile](docs/StorageFile.md) - [TableBroken](docs/TableBroken.md) - [TextHorizontalAlignment](docs/TextHorizontalAlignment.md) - [TextIcon](docs/TextIcon.md) @@ -487,13 +516,16 @@ Class | Method | HTTP request | Description - [AttachmentResponse](docs/AttachmentResponse.md) - [Attachments](docs/Attachments.md) - [AttachmentsResponse](docs/AttachmentsResponse.md) + - [Bookmark](docs/Bookmark.md) + - [BookmarkResponse](docs/BookmarkResponse.md) + - [Bookmarks](docs/Bookmarks.md) + - [BookmarksResponse](docs/BookmarksResponse.md) - [CaretAnnotationResponse](docs/CaretAnnotationResponse.md) - [CaretAnnotations](docs/CaretAnnotations.md) - [CaretAnnotationsResponse](docs/CaretAnnotationsResponse.md) - [CircleAnnotationResponse](docs/CircleAnnotationResponse.md) - [CircleAnnotations](docs/CircleAnnotations.md) - [CircleAnnotationsResponse](docs/CircleAnnotationsResponse.md) - - [DiscUsageResponse](docs/DiscUsageResponse.md) - [Document](docs/Document.md) - [DocumentPageResponse](docs/DocumentPageResponse.md) - [DocumentPagesResponse](docs/DocumentPagesResponse.md) @@ -509,10 +541,7 @@ Class | Method | HTTP request | Description - [FileAttachmentAnnotationResponse](docs/FileAttachmentAnnotationResponse.md) - [FileAttachmentAnnotations](docs/FileAttachmentAnnotations.md) - [FileAttachmentAnnotationsResponse](docs/FileAttachmentAnnotationsResponse.md) - - [FileExistResponse](docs/FileExistResponse.md) - [FileVersion](docs/FileVersion.md) - - [FileVersionsResponse](docs/FileVersionsResponse.md) - - [FilesResponse](docs/FilesResponse.md) - [FreeTextAnnotationResponse](docs/FreeTextAnnotationResponse.md) - [FreeTextAnnotations](docs/FreeTextAnnotations.md) - [FreeTextAnnotationsResponse](docs/FreeTextAnnotationsResponse.md) @@ -572,7 +601,6 @@ Class | Method | HTTP request | Description - [StampInfo](docs/StampInfo.md) - [StampsInfo](docs/StampsInfo.md) - [StampsInfoResponse](docs/StampsInfoResponse.md) - - [StorageExistResponse](docs/StorageExistResponse.md) - [StrikeOutAnnotationResponse](docs/StrikeOutAnnotationResponse.md) - [StrikeOutAnnotations](docs/StrikeOutAnnotations.md) - [StrikeOutAnnotationsResponse](docs/StrikeOutAnnotationsResponse.md) diff --git a/asposepdfcloud/__init__.py b/asposepdfcloud/__init__.py index 0dbdec7..9d0689b 100644 --- a/asposepdfcloud/__init__.py +++ b/asposepdfcloud/__init__.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -35,7 +35,6 @@ from .models.annotation_state import AnnotationState from .models.annotation_type import AnnotationType from .models.antialiasing_processing_type import AntialiasingProcessingType -from .models.append_document import AppendDocument from .models.aspose_response import AsposeResponse from .models.border_corner_style import BorderCornerStyle from .models.border_info import BorderInfo @@ -54,10 +53,13 @@ from .models.doc_recognition_mode import DocRecognitionMode from .models.document_privilege import DocumentPrivilege from .models.epub_recognition_mode import EpubRecognitionMode +from .models.error import Error +from .models.error_details import ErrorDetails from .models.field_type import FieldType -from .models.file import File -from .models.file_exist import FileExist from .models.file_icon import FileIcon +from .models.file_versions import FileVersions +from .models.files_list import FilesList +from .models.files_upload_result import FilesUploadResult from .models.font_encoding_rules import FontEncodingRules from .models.font_saving_modes import FontSavingModes from .models.font_styles import FontStyles @@ -80,6 +82,7 @@ from .models.link_highlighting_mode import LinkHighlightingMode from .models.margin_info import MarginInfo from .models.merge_documents import MergeDocuments +from .models.object_exist import ObjectExist from .models.optimize_options import OptimizeOptions from .models.page_word_count import PageWordCount from .models.paragraph import Paragraph @@ -104,6 +107,8 @@ from .models.stamp import Stamp from .models.stamp_icon import StampIcon from .models.stamp_type import StampType +from .models.storage_exist import StorageExist +from .models.storage_file import StorageFile from .models.table_broken import TableBroken from .models.text_horizontal_alignment import TextHorizontalAlignment from .models.text_icon import TextIcon @@ -124,13 +129,16 @@ from .models.attachment_response import AttachmentResponse from .models.attachments import Attachments from .models.attachments_response import AttachmentsResponse +from .models.bookmark import Bookmark +from .models.bookmark_response import BookmarkResponse +from .models.bookmarks import Bookmarks +from .models.bookmarks_response import BookmarksResponse from .models.caret_annotation_response import CaretAnnotationResponse from .models.caret_annotations import CaretAnnotations from .models.caret_annotations_response import CaretAnnotationsResponse from .models.circle_annotation_response import CircleAnnotationResponse from .models.circle_annotations import CircleAnnotations from .models.circle_annotations_response import CircleAnnotationsResponse -from .models.disc_usage_response import DiscUsageResponse from .models.document import Document from .models.document_page_response import DocumentPageResponse from .models.document_pages_response import DocumentPagesResponse @@ -146,10 +154,7 @@ from .models.file_attachment_annotation_response import FileAttachmentAnnotationResponse from .models.file_attachment_annotations import FileAttachmentAnnotations from .models.file_attachment_annotations_response import FileAttachmentAnnotationsResponse -from .models.file_exist_response import FileExistResponse from .models.file_version import FileVersion -from .models.file_versions_response import FileVersionsResponse -from .models.files_response import FilesResponse from .models.free_text_annotation_response import FreeTextAnnotationResponse from .models.free_text_annotations import FreeTextAnnotations from .models.free_text_annotations_response import FreeTextAnnotationsResponse @@ -209,7 +214,6 @@ from .models.stamp_info import StampInfo from .models.stamps_info import StampsInfo from .models.stamps_info_response import StampsInfoResponse -from .models.storage_exist_response import StorageExistResponse from .models.strike_out_annotation_response import StrikeOutAnnotationResponse from .models.strike_out_annotations import StrikeOutAnnotations from .models.strike_out_annotations_response import StrikeOutAnnotationsResponse diff --git a/asposepdfcloud/api_client.py b/asposepdfcloud/api_client.py index 486e380..0329f01 100644 --- a/asposepdfcloud/api_client.py +++ b/asposepdfcloud/api_client.py @@ -22,7 +22,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -192,7 +192,7 @@ def __call_api(self, resource_path, method, _request_timeout=_request_timeout) except ApiException as error: if error.status == 401: - self.__refresh_token() + self.__request_token() self.__add_o_auth_token(header_params) response_data = self.request(method, url, query_params=query_params, @@ -240,10 +240,10 @@ def __request_token(self): } # resource path - resource_path = "/oauth2/token" + resource_path = "/connect/token" # request url - url = self.host.replace("/v2.0", "") + resource_path + url = self.host.replace("/v3.0", "") + resource_path # perform request and return response response_data = self.request(method, url, @@ -252,36 +252,7 @@ def __request_token(self): data = json.loads(str(response_data.data)) config.access_token = data['access_token'] - config.refresh_token = data['refresh_token'] - def __refresh_token(self): - config = Configuration() - - # header parameters - header_params = {"Content-Type" : "application/x-www-form-urlencoded"} - - method = 'POST' - - # post params - post_params = { - "grant_type" : "refresh_token", - "refresh_token" : config.refresh_token - } - - # resource path - resource_path = "/oauth2/token" - - # request url - url = self.host.replace("/v2.0", "") + resource_path - - # perform request and return response - response_data = self.request(method, url, - headers=header_params, - post_params=post_params) - - data = json.loads(str(response_data.data)) - config.access_token = data['access_token'] - config.refresh_token = data['refresh_token'] def __add_o_auth_token(self, header_params): config = Configuration() diff --git a/asposepdfcloud/apis/__init__.py b/asposepdfcloud/apis/__init__.py index 439a651..dcca3ae 100644 --- a/asposepdfcloud/apis/__init__.py +++ b/asposepdfcloud/apis/__init__.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/apis/pdf_api.py b/asposepdfcloud/apis/pdf_api.py index ed21b60..dc0172e 100644 --- a/asposepdfcloud/apis/pdf_api.py +++ b/asposepdfcloud/apis/pdf_api.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -57,57 +57,59 @@ def __init__(self, api_client=None): config.api_client = ApiClient(None, None) self.api_client = config.api_client - def delete_annotation(self, name, annotation_id, **kwargs): + def copy_file(self, src_path, dest_path, **kwargs): """ - Delete document annotation by ID + Copy file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.copy_file(src_path, dest_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str src_path: Source file path e.g. '/folder/file.ext' (required) + :param str dest_path: Destination file path (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :param str version_id: File version ID to copy + :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_annotation_with_http_info(name, annotation_id, **kwargs) + return self.copy_file_with_http_info(src_path, dest_path, **kwargs) else: - (data) = self.delete_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.copy_file_with_http_info(src_path, dest_path, **kwargs) return data - def delete_annotation_with_http_info(self, name, annotation_id, **kwargs): + def copy_file_with_http_info(self, src_path, dest_path, **kwargs): """ - Delete document annotation by ID + Copy file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.copy_file_with_http_info(src_path, dest_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str src_path: Source file path e.g. '/folder/file.ext' (required) + :param str dest_path: Destination file path (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :param str version_id: File version ID to copy + :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['src_path', 'dest_path', 'src_storage_name', 'dest_storage_name', 'version_id'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -118,31 +120,33 @@ def delete_annotation_with_http_info(self, name, annotation_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_annotation" % key + " to method copy_file" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_annotation`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `delete_annotation`") + # verify the required parameter 'src_path' is set + if ('src_path' not in params) or (params['src_path'] is None): + raise ValueError("Missing the required parameter `src_path` when calling `copy_file`") + # verify the required parameter 'dest_path' is set + if ('dest_path' not in params) or (params['dest_path'] is None): + raise ValueError("Missing the required parameter `dest_path` when calling `copy_file`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] + if 'src_path' in params: + path_params['srcPath'] = params['src_path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'dest_path' in params: + query_params.append(('destPath', params['dest_path'])) + if 'src_storage_name' in params: + query_params.append(('srcStorageName', params['src_storage_name'])) + if 'dest_storage_name' in params: + query_params.append(('destStorageName', params['dest_storage_name'])) + if 'version_id' in params: + query_params.append(('versionId', params['version_id'])) header_params = {} @@ -159,16 +163,16 @@ def delete_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/{annotationId}', 'DELETE', + return self.api_client.call_api('/pdf/storage/file/copy/{srcPath}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AsposeResponse', + response_type=None, auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -176,55 +180,57 @@ def delete_annotation_with_http_info(self, name, annotation_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_document_annotations(self, name, **kwargs): + def copy_folder(self, src_path, dest_path, **kwargs): """ - Delete all annotations from the document + Copy folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_annotations(name, callback=callback_function) + >>> thread = api.copy_folder(src_path, dest_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str src_path: Source folder path e.g. '/src' (required) + :param str dest_path: Destination folder path e.g. '/dst' (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_document_annotations_with_http_info(name, **kwargs) + return self.copy_folder_with_http_info(src_path, dest_path, **kwargs) else: - (data) = self.delete_document_annotations_with_http_info(name, **kwargs) + (data) = self.copy_folder_with_http_info(src_path, dest_path, **kwargs) return data - def delete_document_annotations_with_http_info(self, name, **kwargs): + def copy_folder_with_http_info(self, src_path, dest_path, **kwargs): """ - Delete all annotations from the document + Copy folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.copy_folder_with_http_info(src_path, dest_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str src_path: Source folder path e.g. '/src' (required) + :param str dest_path: Destination folder path e.g. '/dst' (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['src_path', 'dest_path', 'src_storage_name', 'dest_storage_name'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -235,26 +241,31 @@ def delete_document_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_document_annotations" % key + " to method copy_folder" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_document_annotations`") + # verify the required parameter 'src_path' is set + if ('src_path' not in params) or (params['src_path'] is None): + raise ValueError("Missing the required parameter `src_path` when calling `copy_folder`") + # verify the required parameter 'dest_path' is set + if ('dest_path' not in params) or (params['dest_path'] is None): + raise ValueError("Missing the required parameter `dest_path` when calling `copy_folder`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] + if 'src_path' in params: + path_params['srcPath'] = params['src_path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'dest_path' in params: + query_params.append(('destPath', params['dest_path'])) + if 'src_storage_name' in params: + query_params.append(('srcStorageName', params['src_storage_name'])) + if 'dest_storage_name' in params: + query_params.append(('destStorageName', params['dest_storage_name'])) header_params = {} @@ -271,16 +282,16 @@ def delete_document_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations', 'DELETE', + return self.api_client.call_api('/pdf/storage/folder/copy/{srcPath}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AsposeResponse', + response_type=None, auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -288,55 +299,53 @@ def delete_document_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_document_link_annotations(self, name, **kwargs): + def create_folder(self, path, **kwargs): """ - Delete all link annotations from the document + Create the folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_link_annotations(name, callback=callback_function) + >>> thread = api.create_folder(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str path: Folder path to create e.g. 'folder_1/folder_2/' (required) + :param str storage_name: Storage name + :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_document_link_annotations_with_http_info(name, **kwargs) + return self.create_folder_with_http_info(path, **kwargs) else: - (data) = self.delete_document_link_annotations_with_http_info(name, **kwargs) + (data) = self.create_folder_with_http_info(path, **kwargs) return data - def delete_document_link_annotations_with_http_info(self, name, **kwargs): + def create_folder_with_http_info(self, path, **kwargs): """ - Delete all link annotations from the document + Create the folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_link_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.create_folder_with_http_info(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str path: Folder path to create e.g. 'folder_1/folder_2/' (required) + :param str storage_name: Storage name + :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['path', 'storage_name'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -347,26 +356,24 @@ def delete_document_link_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_document_link_annotations" % key + " to method create_folder" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_document_link_annotations`") + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `create_folder`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] + if 'path' in params: + path_params['path'] = params['path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) header_params = {} @@ -383,16 +390,16 @@ def delete_document_link_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/links', 'DELETE', + return self.api_client.call_api('/pdf/storage/folder/{path}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AsposeResponse', + response_type=None, auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -400,20 +407,21 @@ def delete_document_link_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_document_stamps(self, name, **kwargs): + def delete_annotation(self, name, annotation_id, **kwargs): """ - Delete all stamps from the document + Delete document annotation by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_stamps(name, callback=callback_function) + >>> thread = api.delete_annotation(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -422,25 +430,26 @@ def delete_document_stamps(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_document_stamps_with_http_info(name, **kwargs) + return self.delete_annotation_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.delete_document_stamps_with_http_info(name, **kwargs) + (data) = self.delete_annotation_with_http_info(name, annotation_id, **kwargs) return data - def delete_document_stamps_with_http_info(self, name, **kwargs): + def delete_annotation_with_http_info(self, name, annotation_id, **kwargs): """ - Delete all stamps from the document + Delete document annotation by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_stamps_with_http_info(name, callback=callback_function) + >>> thread = api.delete_annotation_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -448,7 +457,7 @@ def delete_document_stamps_with_http_info(self, name, **kwargs): returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'annotation_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -459,13 +468,16 @@ def delete_document_stamps_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_document_stamps" % key + " to method delete_annotation" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_document_stamps`") + raise ValueError("Missing the required parameter `name` when calling `delete_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `delete_annotation`") collection_formats = {} @@ -473,6 +485,8 @@ def delete_document_stamps_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -495,9 +509,9 @@ def delete_document_stamps_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/stamps', 'DELETE', + return self.api_client.call_api('/pdf/{name}/annotations/{annotationId}', 'DELETE', path_params, query_params, header_params, @@ -512,55 +526,57 @@ def delete_document_stamps_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_document_tables(self, name, **kwargs): + def delete_bookmark(self, name, bookmark_path, **kwargs): """ - Delete all tables from the document + Delete document bookmark by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_tables(name, callback=callback_function) + >>> thread = api.delete_bookmark(name, bookmark_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str storage: The document storage. + :param str bookmark_path: The bookmark path. (required) :param str folder: The document folder. + :param str storage: The document storage. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_document_tables_with_http_info(name, **kwargs) + return self.delete_bookmark_with_http_info(name, bookmark_path, **kwargs) else: - (data) = self.delete_document_tables_with_http_info(name, **kwargs) + (data) = self.delete_bookmark_with_http_info(name, bookmark_path, **kwargs) return data - def delete_document_tables_with_http_info(self, name, **kwargs): + def delete_bookmark_with_http_info(self, name, bookmark_path, **kwargs): """ - Delete all tables from the document + Delete document bookmark by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_document_tables_with_http_info(name, callback=callback_function) + >>> thread = api.delete_bookmark_with_http_info(name, bookmark_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str storage: The document storage. + :param str bookmark_path: The bookmark path. (required) :param str folder: The document folder. + :param str storage: The document storage. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'bookmark_path', 'folder', 'storage'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -571,13 +587,16 @@ def delete_document_tables_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_document_tables" % key + " to method delete_bookmark" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_document_tables`") + raise ValueError("Missing the required parameter `name` when calling `delete_bookmark`") + # verify the required parameter 'bookmark_path' is set + if ('bookmark_path' not in params) or (params['bookmark_path'] is None): + raise ValueError("Missing the required parameter `bookmark_path` when calling `delete_bookmark`") collection_formats = {} @@ -585,12 +604,14 @@ def delete_document_tables_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'bookmark_path' in params: + path_params['bookmarkPath'] = params['bookmark_path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) if 'folder' in params: query_params.append(('folder', params['folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) header_params = {} @@ -607,9 +628,9 @@ def delete_document_tables_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/tables', 'DELETE', + return self.api_client.call_api('/pdf/{name}/bookmarks/bookmark/{bookmarkPath}', 'DELETE', path_params, query_params, header_params, @@ -624,21 +645,20 @@ def delete_document_tables_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_field(self, name, field_name, **kwargs): + def delete_document_annotations(self, name, **kwargs): """ - Delete document field by name. + Delete all annotations from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_field(name, field_name, callback=callback_function) + >>> thread = api.delete_document_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str field_name: The field name/ (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -647,26 +667,25 @@ def delete_field(self, name, field_name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_field_with_http_info(name, field_name, **kwargs) + return self.delete_document_annotations_with_http_info(name, **kwargs) else: - (data) = self.delete_field_with_http_info(name, field_name, **kwargs) + (data) = self.delete_document_annotations_with_http_info(name, **kwargs) return data - def delete_field_with_http_info(self, name, field_name, **kwargs): + def delete_document_annotations_with_http_info(self, name, **kwargs): """ - Delete document field by name. + Delete all annotations from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_field_with_http_info(name, field_name, callback=callback_function) + >>> thread = api.delete_document_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str field_name: The field name/ (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -674,7 +693,7 @@ def delete_field_with_http_info(self, name, field_name, **kwargs): returns the request thread. """ - all_params = ['name', 'field_name', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -685,16 +704,13 @@ def delete_field_with_http_info(self, name, field_name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_field" % key + " to method delete_document_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_field`") - # verify the required parameter 'field_name' is set - if ('field_name' not in params) or (params['field_name'] is None): - raise ValueError("Missing the required parameter `field_name` when calling `delete_field`") + raise ValueError("Missing the required parameter `name` when calling `delete_document_annotations`") collection_formats = {} @@ -702,8 +718,6 @@ def delete_field_with_http_info(self, name, field_name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'field_name' in params: - path_params['fieldName'] = params['field_name'] query_params = [] if 'storage' in params: @@ -726,9 +740,9 @@ def delete_field_with_http_info(self, name, field_name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/fields/{fieldName}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/annotations', 'DELETE', path_params, query_params, header_params, @@ -743,55 +757,55 @@ def delete_field_with_http_info(self, name, field_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_file(self, path, **kwargs): + def delete_document_bookmarks(self, name, **kwargs): """ - Remove a specific file + Delete all document bookmarks. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_file(path, callback=callback_function) + >>> thread = api.delete_document_bookmarks(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Path of the file including file name and extension e.g. /Folder1/file.ext (required) - :param str version_id: File's version - :param str storage: User's storage name + :param str name: The document name. (required) + :param str folder: The document folder. + :param str storage: The document storage. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_file_with_http_info(path, **kwargs) + return self.delete_document_bookmarks_with_http_info(name, **kwargs) else: - (data) = self.delete_file_with_http_info(path, **kwargs) + (data) = self.delete_document_bookmarks_with_http_info(name, **kwargs) return data - def delete_file_with_http_info(self, path, **kwargs): + def delete_document_bookmarks_with_http_info(self, name, **kwargs): """ - Remove a specific file + Delete all document bookmarks. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_file_with_http_info(path, callback=callback_function) + >>> thread = api.delete_document_bookmarks_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Path of the file including file name and extension e.g. /Folder1/file.ext (required) - :param str version_id: File's version - :param str storage: User's storage name + :param str name: The document name. (required) + :param str folder: The document folder. + :param str storage: The document storage. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['path', 'version_id', 'storage'] + all_params = ['name', 'folder', 'storage'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -802,24 +816,24 @@ def delete_file_with_http_info(self, path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_file" % key + " to method delete_document_bookmarks" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'path' is set - if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `delete_file`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `delete_document_bookmarks`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) - if 'version_id' in params: - query_params.append(('versionId', params['version_id'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) if 'storage' in params: query_params.append(('storage', params['storage'])) @@ -838,9 +852,9 @@ def delete_file_with_http_info(self, path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/file', 'DELETE', + return self.api_client.call_api('/pdf/{name}/bookmarks/tree', 'DELETE', path_params, query_params, header_params, @@ -855,55 +869,55 @@ def delete_file_with_http_info(self, path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_folder(self, path, **kwargs): + def delete_document_link_annotations(self, name, **kwargs): """ - Remove a specific folder + Delete all link annotations from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_folder(path, callback=callback_function) + >>> thread = api.delete_document_link_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Folder path e.g. /Folder1 (required) - :param str storage: User's storage name - :param bool recursive: Remove recursivelly inner folder/files. If false and folder contains data than exception is raised. + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_folder_with_http_info(path, **kwargs) + return self.delete_document_link_annotations_with_http_info(name, **kwargs) else: - (data) = self.delete_folder_with_http_info(path, **kwargs) + (data) = self.delete_document_link_annotations_with_http_info(name, **kwargs) return data - def delete_folder_with_http_info(self, path, **kwargs): + def delete_document_link_annotations_with_http_info(self, name, **kwargs): """ - Remove a specific folder + Delete all link annotations from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_folder_with_http_info(path, callback=callback_function) + >>> thread = api.delete_document_link_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Folder path e.g. /Folder1 (required) - :param str storage: User's storage name - :param bool recursive: Remove recursivelly inner folder/files. If false and folder contains data than exception is raised. + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['path', 'storage', 'recursive'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -914,26 +928,26 @@ def delete_folder_with_http_info(self, path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_folder" % key + " to method delete_document_link_annotations" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'path' is set - if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `delete_folder`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `delete_document_link_annotations`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) - if 'recursive' in params: - query_params.append(('recursive', params['recursive'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -950,9 +964,9 @@ def delete_folder_with_http_info(self, path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/folder', 'DELETE', + return self.api_client.call_api('/pdf/{name}/links', 'DELETE', path_params, query_params, header_params, @@ -967,21 +981,20 @@ def delete_folder_with_http_info(self, path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_image(self, name, image_id, **kwargs): + def delete_document_stamps(self, name, **kwargs): """ - Delete image from document page. + Delete all stamps from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_image(name, image_id, callback=callback_function) + >>> thread = api.delete_document_stamps(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -990,26 +1003,25 @@ def delete_image(self, name, image_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_image_with_http_info(name, image_id, **kwargs) + return self.delete_document_stamps_with_http_info(name, **kwargs) else: - (data) = self.delete_image_with_http_info(name, image_id, **kwargs) + (data) = self.delete_document_stamps_with_http_info(name, **kwargs) return data - def delete_image_with_http_info(self, name, image_id, **kwargs): + def delete_document_stamps_with_http_info(self, name, **kwargs): """ - Delete image from document page. + Delete all stamps from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_image_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.delete_document_stamps_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1017,7 +1029,7 @@ def delete_image_with_http_info(self, name, image_id, **kwargs): returns the request thread. """ - all_params = ['name', 'image_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1028,16 +1040,13 @@ def delete_image_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_image" % key + " to method delete_document_stamps" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_image`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `delete_image`") + raise ValueError("Missing the required parameter `name` when calling `delete_document_stamps`") collection_formats = {} @@ -1045,8 +1054,6 @@ def delete_image_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] query_params = [] if 'storage' in params: @@ -1069,9 +1076,9 @@ def delete_image_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/stamps', 'DELETE', path_params, query_params, header_params, @@ -1086,21 +1093,20 @@ def delete_image_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_link_annotation(self, name, link_id, **kwargs): + def delete_document_tables(self, name, **kwargs): """ - Delete document page link annotation by ID + Delete all tables from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_link_annotation(name, link_id, callback=callback_function) + >>> thread = api.delete_document_tables(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str link_id: The link ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1109,26 +1115,25 @@ def delete_link_annotation(self, name, link_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_link_annotation_with_http_info(name, link_id, **kwargs) + return self.delete_document_tables_with_http_info(name, **kwargs) else: - (data) = self.delete_link_annotation_with_http_info(name, link_id, **kwargs) + (data) = self.delete_document_tables_with_http_info(name, **kwargs) return data - def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): + def delete_document_tables_with_http_info(self, name, **kwargs): """ - Delete document page link annotation by ID + Delete all tables from the document This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_link_annotation_with_http_info(name, link_id, callback=callback_function) + >>> thread = api.delete_document_tables_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str link_id: The link ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1136,7 +1141,7 @@ def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): returns the request thread. """ - all_params = ['name', 'link_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1147,16 +1152,13 @@ def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_link_annotation" % key + " to method delete_document_tables" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_link_annotation`") - # verify the required parameter 'link_id' is set - if ('link_id' not in params) or (params['link_id'] is None): - raise ValueError("Missing the required parameter `link_id` when calling `delete_link_annotation`") + raise ValueError("Missing the required parameter `name` when calling `delete_document_tables`") collection_formats = {} @@ -1164,8 +1166,6 @@ def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'link_id' in params: - path_params['linkId'] = params['link_id'] query_params = [] if 'storage' in params: @@ -1188,9 +1188,9 @@ def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/links/{linkId}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/tables', 'DELETE', path_params, query_params, header_params, @@ -1205,21 +1205,21 @@ def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_page(self, name, page_number, **kwargs): + def delete_field(self, name, field_name, **kwargs): """ - Delete document page by its number. + Delete document field by name. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page(name, page_number, callback=callback_function) + >>> thread = api.delete_field(name, field_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str field_name: The field name/ (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1228,26 +1228,26 @@ def delete_page(self, name, page_number, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_page_with_http_info(name, page_number, **kwargs) + return self.delete_field_with_http_info(name, field_name, **kwargs) else: - (data) = self.delete_page_with_http_info(name, page_number, **kwargs) + (data) = self.delete_field_with_http_info(name, field_name, **kwargs) return data - def delete_page_with_http_info(self, name, page_number, **kwargs): + def delete_field_with_http_info(self, name, field_name, **kwargs): """ - Delete document page by its number. + Delete document field by name. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.delete_field_with_http_info(name, field_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str field_name: The field name/ (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1255,7 +1255,7 @@ def delete_page_with_http_info(self, name, page_number, **kwargs): returns the request thread. """ - all_params = ['name', 'page_number', 'storage', 'folder'] + all_params = ['name', 'field_name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1266,16 +1266,16 @@ def delete_page_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_page" % key + " to method delete_field" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_page`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `delete_page`") + raise ValueError("Missing the required parameter `name` when calling `delete_field`") + # verify the required parameter 'field_name' is set + if ('field_name' not in params) or (params['field_name'] is None): + raise ValueError("Missing the required parameter `field_name` when calling `delete_field`") collection_formats = {} @@ -1283,8 +1283,8 @@ def delete_page_with_http_info(self, name, page_number, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] + if 'field_name' in params: + path_params['fieldName'] = params['field_name'] query_params = [] if 'storage' in params: @@ -1307,9 +1307,9 @@ def delete_page_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/fields/{fieldName}', 'DELETE', path_params, query_params, header_params, @@ -1324,57 +1324,55 @@ def delete_page_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_page_annotations(self, name, page_number, **kwargs): + def delete_file(self, path, **kwargs): """ - Delete all annotations from the page + Delete file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_annotations(name, page_number, callback=callback_function) + >>> thread = api.delete_file(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str path: File path e.g. '/folder/file.ext' (required) + :param str storage_name: Storage name + :param str version_id: File version ID to delete + :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_page_annotations_with_http_info(name, page_number, **kwargs) + return self.delete_file_with_http_info(path, **kwargs) else: - (data) = self.delete_page_annotations_with_http_info(name, page_number, **kwargs) + (data) = self.delete_file_with_http_info(path, **kwargs) return data - def delete_page_annotations_with_http_info(self, name, page_number, **kwargs): + def delete_file_with_http_info(self, path, **kwargs): """ - Delete all annotations from the page + Delete file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_annotations_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.delete_file_with_http_info(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str path: File path e.g. '/folder/file.ext' (required) + :param str storage_name: Storage name + :param str version_id: File version ID to delete + :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'storage', 'folder'] + all_params = ['path', 'storage_name', 'version_id'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1385,31 +1383,26 @@ def delete_page_annotations_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_page_annotations" % key + " to method delete_file" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_page_annotations`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `delete_page_annotations`") + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `delete_file`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] + if 'path' in params: + path_params['path'] = params['path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + if 'version_id' in params: + query_params.append(('versionId', params['version_id'])) header_params = {} @@ -1426,16 +1419,16 @@ def delete_page_annotations_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations', 'DELETE', + return self.api_client.call_api('/pdf/storage/file/{path}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AsposeResponse', + response_type=None, auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1443,57 +1436,55 @@ def delete_page_annotations_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_page_link_annotations(self, name, page_number, **kwargs): + def delete_folder(self, path, **kwargs): """ - Delete all link annotations from the page + Delete folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_link_annotations(name, page_number, callback=callback_function) + >>> thread = api.delete_folder(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str path: Folder path e.g. '/folder' (required) + :param str storage_name: Storage name + :param bool recursive: Enable to delete folders, subfolders and files + :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_page_link_annotations_with_http_info(name, page_number, **kwargs) + return self.delete_folder_with_http_info(path, **kwargs) else: - (data) = self.delete_page_link_annotations_with_http_info(name, page_number, **kwargs) + (data) = self.delete_folder_with_http_info(path, **kwargs) return data - def delete_page_link_annotations_with_http_info(self, name, page_number, **kwargs): + def delete_folder_with_http_info(self, path, **kwargs): """ - Delete all link annotations from the page + Delete folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_link_annotations_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.delete_folder_with_http_info(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AsposeResponse + :param str path: Folder path e.g. '/folder' (required) + :param str storage_name: Storage name + :param bool recursive: Enable to delete folders, subfolders and files + :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'storage', 'folder'] + all_params = ['path', 'storage_name', 'recursive'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1504,31 +1495,26 @@ def delete_page_link_annotations_with_http_info(self, name, page_number, **kwarg if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_page_link_annotations" % key + " to method delete_folder" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_page_link_annotations`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `delete_page_link_annotations`") + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `delete_folder`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] + if 'path' in params: + path_params['path'] = params['path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + if 'recursive' in params: + query_params.append(('recursive', params['recursive'])) header_params = {} @@ -1545,16 +1531,16 @@ def delete_page_link_annotations_with_http_info(self, name, page_number, **kwarg select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/links', 'DELETE', + return self.api_client.call_api('/pdf/storage/folder/{path}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AsposeResponse', + response_type=None, auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1562,21 +1548,21 @@ def delete_page_link_annotations_with_http_info(self, name, page_number, **kwarg _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_page_stamps(self, name, page_number, **kwargs): + def delete_image(self, name, image_id, **kwargs): """ - Delete all stamps from the page + Delete image from document page. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_stamps(name, page_number, callback=callback_function) + >>> thread = api.delete_image(name, image_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str image_id: Image ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1585,26 +1571,26 @@ def delete_page_stamps(self, name, page_number, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_page_stamps_with_http_info(name, page_number, **kwargs) + return self.delete_image_with_http_info(name, image_id, **kwargs) else: - (data) = self.delete_page_stamps_with_http_info(name, page_number, **kwargs) + (data) = self.delete_image_with_http_info(name, image_id, **kwargs) return data - def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): + def delete_image_with_http_info(self, name, image_id, **kwargs): """ - Delete all stamps from the page + Delete image from document page. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_stamps_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.delete_image_with_http_info(name, image_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str image_id: Image ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1612,7 +1598,7 @@ def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): returns the request thread. """ - all_params = ['name', 'page_number', 'storage', 'folder'] + all_params = ['name', 'image_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1623,16 +1609,16 @@ def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_page_stamps" % key + " to method delete_image" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_page_stamps`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `delete_page_stamps`") + raise ValueError("Missing the required parameter `name` when calling `delete_image`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `delete_image`") collection_formats = {} @@ -1640,8 +1626,8 @@ def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] query_params = [] if 'storage' in params: @@ -1664,9 +1650,9 @@ def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamps', 'DELETE', + return self.api_client.call_api('/pdf/{name}/images/{imageId}', 'DELETE', path_params, query_params, header_params, @@ -1681,21 +1667,21 @@ def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_page_tables(self, name, page_number, **kwargs): + def delete_link_annotation(self, name, link_id, **kwargs): """ - Delete all tables from the page + Delete document page link annotation by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_tables(name, page_number, callback=callback_function) + >>> thread = api.delete_link_annotation(name, link_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str link_id: The link ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1704,26 +1690,26 @@ def delete_page_tables(self, name, page_number, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_page_tables_with_http_info(name, page_number, **kwargs) + return self.delete_link_annotation_with_http_info(name, link_id, **kwargs) else: - (data) = self.delete_page_tables_with_http_info(name, page_number, **kwargs) + (data) = self.delete_link_annotation_with_http_info(name, link_id, **kwargs) return data - def delete_page_tables_with_http_info(self, name, page_number, **kwargs): + def delete_link_annotation_with_http_info(self, name, link_id, **kwargs): """ - Delete all tables from the page + Delete document page link annotation by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_page_tables_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.delete_link_annotation_with_http_info(name, link_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str link_id: The link ID. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -1731,7 +1717,7 @@ def delete_page_tables_with_http_info(self, name, page_number, **kwargs): returns the request thread. """ - all_params = ['name', 'page_number', 'storage', 'folder'] + all_params = ['name', 'link_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1742,16 +1728,16 @@ def delete_page_tables_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_page_tables" % key + " to method delete_link_annotation" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_page_tables`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `delete_page_tables`") + raise ValueError("Missing the required parameter `name` when calling `delete_link_annotation`") + # verify the required parameter 'link_id' is set + if ('link_id' not in params) or (params['link_id'] is None): + raise ValueError("Missing the required parameter `link_id` when calling `delete_link_annotation`") collection_formats = {} @@ -1759,8 +1745,8 @@ def delete_page_tables_with_http_info(self, name, page_number, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] + if 'link_id' in params: + path_params['linkId'] = params['link_id'] query_params = [] if 'storage' in params: @@ -1783,9 +1769,9 @@ def delete_page_tables_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/tables', 'DELETE', + return self.api_client.call_api('/pdf/{name}/links/{linkId}', 'DELETE', path_params, query_params, header_params, @@ -1800,55 +1786,57 @@ def delete_page_tables_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_properties(self, name, **kwargs): + def delete_page(self, name, page_number, **kwargs): """ - Delete custom document properties. + Delete document page by its number. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_properties(name, callback=callback_function) + >>> thread = api.delete_page(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str storage: - :param str folder: + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param str storage: The document storage. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_properties_with_http_info(name, **kwargs) + return self.delete_page_with_http_info(name, page_number, **kwargs) else: - (data) = self.delete_properties_with_http_info(name, **kwargs) + (data) = self.delete_page_with_http_info(name, page_number, **kwargs) return data - def delete_properties_with_http_info(self, name, **kwargs): + def delete_page_with_http_info(self, name, page_number, **kwargs): """ - Delete custom document properties. + Delete document page by its number. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_properties_with_http_info(name, callback=callback_function) + >>> thread = api.delete_page_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str storage: - :param str folder: + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param str storage: The document storage. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'page_number', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1859,13 +1847,16 @@ def delete_properties_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_properties" % key + " to method delete_page" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_properties`") + raise ValueError("Missing the required parameter `name` when calling `delete_page`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `delete_page`") collection_formats = {} @@ -1873,6 +1864,8 @@ def delete_properties_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'storage' in params: @@ -1895,9 +1888,9 @@ def delete_properties_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/documentproperties', 'DELETE', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}', 'DELETE', path_params, query_params, header_params, @@ -1912,57 +1905,57 @@ def delete_properties_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_property(self, name, property_name, **kwargs): + def delete_page_annotations(self, name, page_number, **kwargs): """ - Delete document property. + Delete all annotations from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_property(name, property_name, callback=callback_function) + >>> thread = api.delete_page_annotations(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str property_name: (required) - :param str storage: - :param str folder: + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param str storage: The document storage. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_property_with_http_info(name, property_name, **kwargs) + return self.delete_page_annotations_with_http_info(name, page_number, **kwargs) else: - (data) = self.delete_property_with_http_info(name, property_name, **kwargs) + (data) = self.delete_page_annotations_with_http_info(name, page_number, **kwargs) return data - def delete_property_with_http_info(self, name, property_name, **kwargs): + def delete_page_annotations_with_http_info(self, name, page_number, **kwargs): """ - Delete document property. + Delete all annotations from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_property_with_http_info(name, property_name, callback=callback_function) + >>> thread = api.delete_page_annotations_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str property_name: (required) - :param str storage: - :param str folder: + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param str storage: The document storage. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'property_name', 'storage', 'folder'] + all_params = ['name', 'page_number', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1973,16 +1966,16 @@ def delete_property_with_http_info(self, name, property_name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_property" % key + " to method delete_page_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_property`") - # verify the required parameter 'property_name' is set - if ('property_name' not in params) or (params['property_name'] is None): - raise ValueError("Missing the required parameter `property_name` when calling `delete_property`") + raise ValueError("Missing the required parameter `name` when calling `delete_page_annotations`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `delete_page_annotations`") collection_formats = {} @@ -1990,8 +1983,8 @@ def delete_property_with_http_info(self, name, property_name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'property_name' in params: - path_params['propertyName'] = params['property_name'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'storage' in params: @@ -2014,9 +2007,9 @@ def delete_property_with_http_info(self, name, property_name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/documentproperties/{propertyName}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations', 'DELETE', path_params, query_params, header_params, @@ -2031,21 +2024,21 @@ def delete_property_with_http_info(self, name, property_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_stamp(self, name, stamp_id, **kwargs): + def delete_page_link_annotations(self, name, page_number, **kwargs): """ - Delete document stamp by ID + Delete all link annotations from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_stamp(name, stamp_id, callback=callback_function) + >>> thread = api.delete_page_link_annotations(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str stamp_id: The stamp ID. (required) + :param int page_number: The page number. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -2054,26 +2047,26 @@ def delete_stamp(self, name, stamp_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_stamp_with_http_info(name, stamp_id, **kwargs) + return self.delete_page_link_annotations_with_http_info(name, page_number, **kwargs) else: - (data) = self.delete_stamp_with_http_info(name, stamp_id, **kwargs) + (data) = self.delete_page_link_annotations_with_http_info(name, page_number, **kwargs) return data - def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): + def delete_page_link_annotations_with_http_info(self, name, page_number, **kwargs): """ - Delete document stamp by ID + Delete all link annotations from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_stamp_with_http_info(name, stamp_id, callback=callback_function) + >>> thread = api.delete_page_link_annotations_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str stamp_id: The stamp ID. (required) + :param int page_number: The page number. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -2081,7 +2074,7 @@ def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): returns the request thread. """ - all_params = ['name', 'stamp_id', 'storage', 'folder'] + all_params = ['name', 'page_number', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2092,16 +2085,16 @@ def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_stamp" % key + " to method delete_page_link_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_stamp`") - # verify the required parameter 'stamp_id' is set - if ('stamp_id' not in params) or (params['stamp_id'] is None): - raise ValueError("Missing the required parameter `stamp_id` when calling `delete_stamp`") + raise ValueError("Missing the required parameter `name` when calling `delete_page_link_annotations`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `delete_page_link_annotations`") collection_formats = {} @@ -2109,8 +2102,8 @@ def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'stamp_id' in params: - path_params['stampId'] = params['stamp_id'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'storage' in params: @@ -2133,9 +2126,9 @@ def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/stamps/{stampId}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/links', 'DELETE', path_params, query_params, header_params, @@ -2150,21 +2143,21 @@ def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_table(self, name, table_id, **kwargs): + def delete_page_stamps(self, name, page_number, **kwargs): """ - Delete document table by ID + Delete all stamps from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_table(name, table_id, callback=callback_function) + >>> thread = api.delete_page_stamps(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str table_id: The table ID. (required) + :param int page_number: The page number. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -2173,26 +2166,26 @@ def delete_table(self, name, table_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.delete_table_with_http_info(name, table_id, **kwargs) + return self.delete_page_stamps_with_http_info(name, page_number, **kwargs) else: - (data) = self.delete_table_with_http_info(name, table_id, **kwargs) + (data) = self.delete_page_stamps_with_http_info(name, page_number, **kwargs) return data - def delete_table_with_http_info(self, name, table_id, **kwargs): + def delete_page_stamps_with_http_info(self, name, page_number, **kwargs): """ - Delete document table by ID + Delete all stamps from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.delete_table_with_http_info(name, table_id, callback=callback_function) + >>> thread = api.delete_page_stamps_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str table_id: The table ID. (required) + :param int page_number: The page number. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -2200,7 +2193,7 @@ def delete_table_with_http_info(self, name, table_id, **kwargs): returns the request thread. """ - all_params = ['name', 'table_id', 'storage', 'folder'] + all_params = ['name', 'page_number', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2211,16 +2204,16 @@ def delete_table_with_http_info(self, name, table_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_table" % key + " to method delete_page_stamps" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `delete_table`") - # verify the required parameter 'table_id' is set - if ('table_id' not in params) or (params['table_id'] is None): - raise ValueError("Missing the required parameter `table_id` when calling `delete_table`") + raise ValueError("Missing the required parameter `name` when calling `delete_page_stamps`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `delete_page_stamps`") collection_formats = {} @@ -2228,8 +2221,8 @@ def delete_table_with_http_info(self, name, table_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'table_id' in params: - path_params['tableId'] = params['table_id'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'storage' in params: @@ -2252,9 +2245,9 @@ def delete_table_with_http_info(self, name, table_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/tables/{tableId}', 'DELETE', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamps', 'DELETE', path_params, query_params, header_params, @@ -2269,57 +2262,57 @@ def delete_table_with_http_info(self, name, table_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_caret_annotation(self, name, annotation_id, **kwargs): + def delete_page_tables(self, name, page_number, **kwargs): """ - Read document page caret annotation by ID. + Delete all tables from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_caret_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.delete_page_tables(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) + :param int page_number: The page number. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: CaretAnnotationResponse + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_caret_annotation_with_http_info(name, annotation_id, **kwargs) + return self.delete_page_tables_with_http_info(name, page_number, **kwargs) else: - (data) = self.get_caret_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.delete_page_tables_with_http_info(name, page_number, **kwargs) return data - def get_caret_annotation_with_http_info(self, name, annotation_id, **kwargs): + def delete_page_tables_with_http_info(self, name, page_number, **kwargs): """ - Read document page caret annotation by ID. + Delete all tables from the page This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_caret_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.delete_page_tables_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) + :param int page_number: The page number. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: CaretAnnotationResponse + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'page_number', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2330,16 +2323,16 @@ def get_caret_annotation_with_http_info(self, name, annotation_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_caret_annotation" % key + " to method delete_page_tables" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_caret_annotation`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_caret_annotation`") + raise ValueError("Missing the required parameter `name` when calling `delete_page_tables`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `delete_page_tables`") collection_formats = {} @@ -2347,8 +2340,8 @@ def get_caret_annotation_with_http_info(self, name, annotation_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'storage' in params: @@ -2371,16 +2364,16 @@ def get_caret_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/caret/{annotationId}', 'GET', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/tables', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='CaretAnnotationResponse', + response_type='AsposeResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2388,57 +2381,55 @@ def get_caret_annotation_with_http_info(self, name, annotation_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_circle_annotation(self, name, annotation_id, **kwargs): + def delete_properties(self, name, **kwargs): """ - Read document page circle annotation by ID. + Delete custom document properties. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_circle_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.delete_properties(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: CircleAnnotationResponse + :param str name: (required) + :param str storage: + :param str folder: + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_circle_annotation_with_http_info(name, annotation_id, **kwargs) + return self.delete_properties_with_http_info(name, **kwargs) else: - (data) = self.get_circle_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.delete_properties_with_http_info(name, **kwargs) return data - def get_circle_annotation_with_http_info(self, name, annotation_id, **kwargs): + def delete_properties_with_http_info(self, name, **kwargs): """ - Read document page circle annotation by ID. + Delete custom document properties. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_circle_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.delete_properties_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: CircleAnnotationResponse + :param str name: (required) + :param str storage: + :param str folder: + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2449,16 +2440,13 @@ def get_circle_annotation_with_http_info(self, name, annotation_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_circle_annotation" % key + " to method delete_properties" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_circle_annotation`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_circle_annotation`") + raise ValueError("Missing the required parameter `name` when calling `delete_properties`") collection_formats = {} @@ -2466,8 +2454,6 @@ def get_circle_annotation_with_http_info(self, name, annotation_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -2490,16 +2476,16 @@ def get_circle_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/circle/{annotationId}', 'GET', + return self.api_client.call_api('/pdf/{name}/documentproperties', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='CircleAnnotationResponse', + response_type='AsposeResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2507,51 +2493,57 @@ def get_circle_annotation_with_http_info(self, name, annotation_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_disc_usage(self, **kwargs): + def delete_property(self, name, property_name, **kwargs): """ - Check the disk usage of the current account + Delete document property. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_disc_usage(callback=callback_function) + >>> thread = api.delete_property(name, property_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str storage: User's storage name - :return: DiscUsageResponse + :param str name: (required) + :param str property_name: (required) + :param str storage: + :param str folder: + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_disc_usage_with_http_info(**kwargs) + return self.delete_property_with_http_info(name, property_name, **kwargs) else: - (data) = self.get_disc_usage_with_http_info(**kwargs) + (data) = self.delete_property_with_http_info(name, property_name, **kwargs) return data - def get_disc_usage_with_http_info(self, **kwargs): + def delete_property_with_http_info(self, name, property_name, **kwargs): """ - Check the disk usage of the current account + Delete document property. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_disc_usage_with_http_info(callback=callback_function) + >>> thread = api.delete_property_with_http_info(name, property_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str storage: User's storage name - :return: DiscUsageResponse + :param str name: (required) + :param str property_name: (required) + :param str storage: + :param str folder: + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['storage'] + all_params = ['name', 'property_name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2562,19 +2554,31 @@ def get_disc_usage_with_http_info(self, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_disc_usage" % key + " to method delete_property" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `delete_property`") + # verify the required parameter 'property_name' is set + if ('property_name' not in params) or (params['property_name'] is None): + raise ValueError("Missing the required parameter `property_name` when calling `delete_property`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'property_name' in params: + path_params['propertyName'] = params['property_name'] query_params = [] if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -2591,16 +2595,16 @@ def get_disc_usage_with_http_info(self, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/disc', 'GET', + return self.api_client.call_api('/pdf/{name}/documentproperties/{propertyName}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='DiscUsageResponse', + response_type='AsposeResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2608,55 +2612,57 @@ def get_disc_usage_with_http_info(self, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document(self, name, **kwargs): + def delete_stamp(self, name, stamp_id, **kwargs): """ - Read common document info. + Delete document stamp by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document(name, callback=callback_function) + >>> thread = api.delete_stamp(name, stamp_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str stamp_id: The stamp ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: DocumentResponse + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_with_http_info(name, **kwargs) + return self.delete_stamp_with_http_info(name, stamp_id, **kwargs) else: - (data) = self.get_document_with_http_info(name, **kwargs) + (data) = self.delete_stamp_with_http_info(name, stamp_id, **kwargs) return data - def get_document_with_http_info(self, name, **kwargs): + def delete_stamp_with_http_info(self, name, stamp_id, **kwargs): """ - Read common document info. + Delete document stamp by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_with_http_info(name, callback=callback_function) + >>> thread = api.delete_stamp_with_http_info(name, stamp_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str stamp_id: The stamp ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: DocumentResponse + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'stamp_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2667,13 +2673,16 @@ def get_document_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document" % key + " to method delete_stamp" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document`") + raise ValueError("Missing the required parameter `name` when calling `delete_stamp`") + # verify the required parameter 'stamp_id' is set + if ('stamp_id' not in params) or (params['stamp_id'] is None): + raise ValueError("Missing the required parameter `stamp_id` when calling `delete_stamp`") collection_formats = {} @@ -2681,6 +2690,8 @@ def get_document_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'stamp_id' in params: + path_params['stampId'] = params['stamp_id'] query_params = [] if 'storage' in params: @@ -2703,16 +2714,16 @@ def get_document_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}', 'GET', + return self.api_client.call_api('/pdf/{name}/stamps/{stampId}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='DocumentResponse', + response_type='AsposeResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2720,55 +2731,57 @@ def get_document_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_annotations(self, name, **kwargs): + def delete_table(self, name, table_id, **kwargs): """ - Read documant page annotations. Returns only FreeTextAnnotations, TextAnnotations, other annotations will implemented next releases. + Delete document table by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_annotations(name, callback=callback_function) + >>> thread = api.delete_table(name, table_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str table_id: The table ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: AnnotationsInfoResponse + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_annotations_with_http_info(name, **kwargs) + return self.delete_table_with_http_info(name, table_id, **kwargs) else: - (data) = self.get_document_annotations_with_http_info(name, **kwargs) + (data) = self.delete_table_with_http_info(name, table_id, **kwargs) return data - def get_document_annotations_with_http_info(self, name, **kwargs): + def delete_table_with_http_info(self, name, table_id, **kwargs): """ - Read documant page annotations. Returns only FreeTextAnnotations, TextAnnotations, other annotations will implemented next releases. + Delete document table by ID This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.delete_table_with_http_info(name, table_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str table_id: The table ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: AnnotationsInfoResponse + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'table_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2779,13 +2792,16 @@ def get_document_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_annotations" % key + " to method delete_table" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_annotations`") + raise ValueError("Missing the required parameter `name` when calling `delete_table`") + # verify the required parameter 'table_id' is set + if ('table_id' not in params) or (params['table_id'] is None): + raise ValueError("Missing the required parameter `table_id` when calling `delete_table`") collection_formats = {} @@ -2793,6 +2809,8 @@ def get_document_annotations_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'table_id' in params: + path_params['tableId'] = params['table_id'] query_params = [] if 'storage' in params: @@ -2815,16 +2833,16 @@ def get_document_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations', 'GET', + return self.api_client.call_api('/pdf/{name}/tables/{tableId}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AnnotationsInfoResponse', + response_type='AsposeResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2832,57 +2850,55 @@ def get_document_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_attachment_by_index(self, name, attachment_index, **kwargs): + def download_file(self, path, **kwargs): """ - Read document attachment info by its index. + Download file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_attachment_by_index(name, attachment_index, callback=callback_function) + >>> thread = api.download_file(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param int attachment_index: The attachment index. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AttachmentResponse + :param str path: File path e.g. '/folder/file.ext' (required) + :param str storage_name: Storage name + :param str version_id: File version ID to download + :return: file If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) + return self.download_file_with_http_info(path, **kwargs) else: - (data) = self.get_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) + (data) = self.download_file_with_http_info(path, **kwargs) return data - def get_document_attachment_by_index_with_http_info(self, name, attachment_index, **kwargs): + def download_file_with_http_info(self, path, **kwargs): """ - Read document attachment info by its index. + Download file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_attachment_by_index_with_http_info(name, attachment_index, callback=callback_function) + >>> thread = api.download_file_with_http_info(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param int attachment_index: The attachment index. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: AttachmentResponse + :param str path: File path e.g. '/folder/file.ext' (required) + :param str storage_name: Storage name + :param str version_id: File version ID to download + :return: file If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'attachment_index', 'storage', 'folder'] + all_params = ['path', 'storage_name', 'version_id'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2893,31 +2909,26 @@ def get_document_attachment_by_index_with_http_info(self, name, attachment_index if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_attachment_by_index" % key + " to method download_file" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_attachment_by_index`") - # verify the required parameter 'attachment_index' is set - if ('attachment_index' not in params) or (params['attachment_index'] is None): - raise ValueError("Missing the required parameter `attachment_index` when calling `get_document_attachment_by_index`") + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `download_file`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] - if 'attachment_index' in params: - path_params['attachmentIndex'] = params['attachment_index'] + if 'path' in params: + path_params['path'] = params['path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + if 'version_id' in params: + query_params.append(('versionId', params['version_id'])) header_params = {} @@ -2927,23 +2938,23 @@ def get_document_attachment_by_index_with_http_info(self, name, attachment_index body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['application/json']) + select_header_accept(['multipart/form-data']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/attachments/{attachmentIndex}', 'GET', + return self.api_client.call_api('/pdf/storage/file/{path}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AttachmentResponse', + response_type='file', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2951,55 +2962,57 @@ def get_document_attachment_by_index_with_http_info(self, name, attachment_index _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_attachments(self, name, **kwargs): + def get_bookmark(self, name, bookmark_path, **kwargs): """ - Read document attachments info. + Read document bookmark. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_attachments(name, callback=callback_function) + >>> thread = api.get_bookmark(name, bookmark_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str storage: The document storage. + :param str bookmark_path: The bookmark path. (required) :param str folder: The document folder. - :return: AttachmentsResponse + :param str storage: The document storage. + :return: BookmarkResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_attachments_with_http_info(name, **kwargs) + return self.get_bookmark_with_http_info(name, bookmark_path, **kwargs) else: - (data) = self.get_document_attachments_with_http_info(name, **kwargs) + (data) = self.get_bookmark_with_http_info(name, bookmark_path, **kwargs) return data - def get_document_attachments_with_http_info(self, name, **kwargs): + def get_bookmark_with_http_info(self, name, bookmark_path, **kwargs): """ - Read document attachments info. + Read document bookmark. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_attachments_with_http_info(name, callback=callback_function) + >>> thread = api.get_bookmark_with_http_info(name, bookmark_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str storage: The document storage. + :param str bookmark_path: The bookmark path. (required) :param str folder: The document folder. - :return: AttachmentsResponse + :param str storage: The document storage. + :return: BookmarkResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'bookmark_path', 'folder', 'storage'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3010,13 +3023,16 @@ def get_document_attachments_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_attachments" % key + " to method get_bookmark" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_attachments`") + raise ValueError("Missing the required parameter `name` when calling `get_bookmark`") + # verify the required parameter 'bookmark_path' is set + if ('bookmark_path' not in params) or (params['bookmark_path'] is None): + raise ValueError("Missing the required parameter `bookmark_path` when calling `get_bookmark`") collection_formats = {} @@ -3024,12 +3040,14 @@ def get_document_attachments_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'bookmark_path' in params: + path_params['bookmarkPath'] = params['bookmark_path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) if 'folder' in params: query_params.append(('folder', params['folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) header_params = {} @@ -3046,16 +3064,16 @@ def get_document_attachments_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/attachments', 'GET', + return self.api_client.call_api('/pdf/{name}/bookmarks/bookmark/{bookmarkPath}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AttachmentsResponse', + response_type='BookmarkResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3063,55 +3081,57 @@ def get_document_attachments_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_caret_annotations(self, name, **kwargs): + def get_bookmarks(self, name, bookmark_path, **kwargs): """ - Read document caret annotations. + Read document bookmarks node list. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_caret_annotations(name, callback=callback_function) + >>> thread = api.get_bookmarks(name, bookmark_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str storage: The document storage. + :param str bookmark_path: The bookmark path. (required) :param str folder: The document folder. - :return: CaretAnnotationsResponse + :param str storage: The document storage. + :return: BookmarksResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_caret_annotations_with_http_info(name, **kwargs) + return self.get_bookmarks_with_http_info(name, bookmark_path, **kwargs) else: - (data) = self.get_document_caret_annotations_with_http_info(name, **kwargs) + (data) = self.get_bookmarks_with_http_info(name, bookmark_path, **kwargs) return data - def get_document_caret_annotations_with_http_info(self, name, **kwargs): + def get_bookmarks_with_http_info(self, name, bookmark_path, **kwargs): """ - Read document caret annotations. + Read document bookmarks node list. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_caret_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_bookmarks_with_http_info(name, bookmark_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str storage: The document storage. + :param str bookmark_path: The bookmark path. (required) :param str folder: The document folder. - :return: CaretAnnotationsResponse + :param str storage: The document storage. + :return: BookmarksResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'bookmark_path', 'folder', 'storage'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3122,13 +3142,16 @@ def get_document_caret_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_caret_annotations" % key + " to method get_bookmarks" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_caret_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_bookmarks`") + # verify the required parameter 'bookmark_path' is set + if ('bookmark_path' not in params) or (params['bookmark_path'] is None): + raise ValueError("Missing the required parameter `bookmark_path` when calling `get_bookmarks`") collection_formats = {} @@ -3136,12 +3159,14 @@ def get_document_caret_annotations_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'bookmark_path' in params: + path_params['bookmarkPath'] = params['bookmark_path'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) if 'folder' in params: query_params.append(('folder', params['folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) header_params = {} @@ -3158,16 +3183,16 @@ def get_document_caret_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/caret', 'GET', + return self.api_client.call_api('/pdf/{name}/bookmarks/list/{bookmarkPath}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='CaretAnnotationsResponse', + response_type='BookmarksResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3175,55 +3200,57 @@ def get_document_caret_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_circle_annotations(self, name, **kwargs): + def get_caret_annotation(self, name, annotation_id, **kwargs): """ - Read document circle annotations. + Read document page caret annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_circle_annotations(name, callback=callback_function) + >>> thread = api.get_caret_annotation(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: CircleAnnotationsResponse + :return: CaretAnnotationResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_circle_annotations_with_http_info(name, **kwargs) + return self.get_caret_annotation_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.get_document_circle_annotations_with_http_info(name, **kwargs) + (data) = self.get_caret_annotation_with_http_info(name, annotation_id, **kwargs) return data - def get_document_circle_annotations_with_http_info(self, name, **kwargs): + def get_caret_annotation_with_http_info(self, name, annotation_id, **kwargs): """ - Read document circle annotations. + Read document page caret annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_circle_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_caret_annotation_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: CircleAnnotationsResponse + :return: CaretAnnotationResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'annotation_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3234,13 +3261,16 @@ def get_document_circle_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_circle_annotations" % key + " to method get_caret_annotation" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_circle_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_caret_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_caret_annotation`") collection_formats = {} @@ -3248,6 +3278,8 @@ def get_document_circle_annotations_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -3270,16 +3302,16 @@ def get_document_circle_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/circle', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/caret/{annotationId}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='CircleAnnotationsResponse', + response_type='CaretAnnotationResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3287,55 +3319,57 @@ def get_document_circle_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_file_attachment_annotations(self, name, **kwargs): + def get_circle_annotation(self, name, annotation_id, **kwargs): """ - Read document FileAttachment annotations. + Read document page circle annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_file_attachment_annotations(name, callback=callback_function) + >>> thread = api.get_circle_annotation(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FileAttachmentAnnotationsResponse + :return: CircleAnnotationResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_file_attachment_annotations_with_http_info(name, **kwargs) + return self.get_circle_annotation_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.get_document_file_attachment_annotations_with_http_info(name, **kwargs) + (data) = self.get_circle_annotation_with_http_info(name, annotation_id, **kwargs) return data - def get_document_file_attachment_annotations_with_http_info(self, name, **kwargs): + def get_circle_annotation_with_http_info(self, name, annotation_id, **kwargs): """ - Read document FileAttachment annotations. + Read document page circle annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_file_attachment_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_circle_annotation_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FileAttachmentAnnotationsResponse + :return: CircleAnnotationResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'annotation_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3346,13 +3380,16 @@ def get_document_file_attachment_annotations_with_http_info(self, name, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_file_attachment_annotations" % key + " to method get_circle_annotation" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_file_attachment_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_circle_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_circle_annotation`") collection_formats = {} @@ -3360,6 +3397,8 @@ def get_document_file_attachment_annotations_with_http_info(self, name, **kwargs path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -3382,16 +3421,16 @@ def get_document_file_attachment_annotations_with_http_info(self, name, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/fileattachment', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/circle/{annotationId}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FileAttachmentAnnotationsResponse', + response_type='CircleAnnotationResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3399,55 +3438,51 @@ def get_document_file_attachment_annotations_with_http_info(self, name, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_free_text_annotations(self, name, **kwargs): + def get_disc_usage(self, **kwargs): """ - Read document free text annotations. + Get disc usage This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_free_text_annotations(name, callback=callback_function) + >>> thread = api.get_disc_usage(callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: FreeTextAnnotationsResponse + :param str storage_name: Storage name + :return: DiscUsage If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_free_text_annotations_with_http_info(name, **kwargs) + return self.get_disc_usage_with_http_info(**kwargs) else: - (data) = self.get_document_free_text_annotations_with_http_info(name, **kwargs) + (data) = self.get_disc_usage_with_http_info(**kwargs) return data - def get_document_free_text_annotations_with_http_info(self, name, **kwargs): + def get_disc_usage_with_http_info(self, **kwargs): """ - Read document free text annotations. + Get disc usage This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_free_text_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_disc_usage_with_http_info(callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: FreeTextAnnotationsResponse + :param str storage_name: Storage name + :return: DiscUsage If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['storage_name'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3458,26 +3493,19 @@ def get_document_free_text_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_free_text_annotations" % key + " to method get_disc_usage" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_free_text_annotations`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) header_params = {} @@ -3494,16 +3522,16 @@ def get_document_free_text_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/freetext', 'GET', + return self.api_client.call_api('/pdf/storage/disc', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FreeTextAnnotationsResponse', + response_type='DiscUsage', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3511,50 +3539,50 @@ def get_document_free_text_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_highlight_annotations(self, name, **kwargs): + def get_document(self, name, **kwargs): """ - Read document highlight annotations. + Read common document info. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_highlight_annotations(name, callback=callback_function) + >>> thread = api.get_document(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: HighlightAnnotationsResponse + :return: DocumentResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_highlight_annotations_with_http_info(name, **kwargs) + return self.get_document_with_http_info(name, **kwargs) else: - (data) = self.get_document_highlight_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_with_http_info(name, **kwargs) return data - def get_document_highlight_annotations_with_http_info(self, name, **kwargs): + def get_document_with_http_info(self, name, **kwargs): """ - Read document highlight annotations. + Read common document info. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_highlight_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: HighlightAnnotationsResponse + :return: DocumentResponse If the method is called asynchronously, returns the request thread. """ @@ -3570,13 +3598,13 @@ def get_document_highlight_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_highlight_annotations" % key + " to method get_document" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_highlight_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document`") collection_formats = {} @@ -3606,16 +3634,16 @@ def get_document_highlight_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/highlight', 'GET', + return self.api_client.call_api('/pdf/{name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='HighlightAnnotationsResponse', + response_type='DocumentResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3623,50 +3651,50 @@ def get_document_highlight_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_ink_annotations(self, name, **kwargs): + def get_document_annotations(self, name, **kwargs): """ - Read document ink annotations. + Read documant page annotations. Returns only FreeTextAnnotations, TextAnnotations, other annotations will implemented next releases. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_ink_annotations(name, callback=callback_function) + >>> thread = api.get_document_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: InkAnnotationsResponse + :return: AnnotationsInfoResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_ink_annotations_with_http_info(name, **kwargs) + return self.get_document_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_ink_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_annotations_with_http_info(name, **kwargs) return data - def get_document_ink_annotations_with_http_info(self, name, **kwargs): + def get_document_annotations_with_http_info(self, name, **kwargs): """ - Read document ink annotations. + Read documant page annotations. Returns only FreeTextAnnotations, TextAnnotations, other annotations will implemented next releases. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_ink_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: InkAnnotationsResponse + :return: AnnotationsInfoResponse If the method is called asynchronously, returns the request thread. """ @@ -3682,13 +3710,13 @@ def get_document_ink_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_ink_annotations" % key + " to method get_document_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_ink_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_annotations`") collection_formats = {} @@ -3718,16 +3746,16 @@ def get_document_ink_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/ink', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='InkAnnotationsResponse', + response_type='AnnotationsInfoResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3735,55 +3763,57 @@ def get_document_ink_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_line_annotations(self, name, **kwargs): + def get_document_attachment_by_index(self, name, attachment_index, **kwargs): """ - Read document line annotations. + Read document attachment info by its index. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_line_annotations(name, callback=callback_function) + >>> thread = api.get_document_attachment_by_index(name, attachment_index, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param int attachment_index: The attachment index. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: LineAnnotationsResponse + :return: AttachmentResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_line_annotations_with_http_info(name, **kwargs) + return self.get_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) else: - (data) = self.get_document_line_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) return data - def get_document_line_annotations_with_http_info(self, name, **kwargs): + def get_document_attachment_by_index_with_http_info(self, name, attachment_index, **kwargs): """ - Read document line annotations. + Read document attachment info by its index. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_line_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_attachment_by_index_with_http_info(name, attachment_index, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param int attachment_index: The attachment index. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: LineAnnotationsResponse + :return: AttachmentResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'attachment_index', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3794,13 +3824,16 @@ def get_document_line_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_line_annotations" % key + " to method get_document_attachment_by_index" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_line_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_attachment_by_index`") + # verify the required parameter 'attachment_index' is set + if ('attachment_index' not in params) or (params['attachment_index'] is None): + raise ValueError("Missing the required parameter `attachment_index` when calling `get_document_attachment_by_index`") collection_formats = {} @@ -3808,6 +3841,8 @@ def get_document_line_annotations_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'attachment_index' in params: + path_params['attachmentIndex'] = params['attachment_index'] query_params = [] if 'storage' in params: @@ -3830,16 +3865,16 @@ def get_document_line_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/line', 'GET', + return self.api_client.call_api('/pdf/{name}/attachments/{attachmentIndex}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='LineAnnotationsResponse', + response_type='AttachmentResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3847,50 +3882,50 @@ def get_document_line_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_movie_annotations(self, name, **kwargs): + def get_document_attachments(self, name, **kwargs): """ - Read document movie annotations. + Read document attachments info. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_movie_annotations(name, callback=callback_function) + >>> thread = api.get_document_attachments(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: MovieAnnotationsResponse + :return: AttachmentsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_movie_annotations_with_http_info(name, **kwargs) + return self.get_document_attachments_with_http_info(name, **kwargs) else: - (data) = self.get_document_movie_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_attachments_with_http_info(name, **kwargs) return data - def get_document_movie_annotations_with_http_info(self, name, **kwargs): + def get_document_attachments_with_http_info(self, name, **kwargs): """ - Read document movie annotations. + Read document attachments info. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_movie_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_attachments_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: MovieAnnotationsResponse + :return: AttachmentsResponse If the method is called asynchronously, returns the request thread. """ @@ -3906,13 +3941,13 @@ def get_document_movie_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_movie_annotations" % key + " to method get_document_attachments" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_movie_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_attachments`") collection_formats = {} @@ -3942,16 +3977,16 @@ def get_document_movie_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/movie', 'GET', + return self.api_client.call_api('/pdf/{name}/attachments', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='MovieAnnotationsResponse', + response_type='AttachmentsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3959,50 +3994,162 @@ def get_document_movie_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_poly_line_annotations(self, name, **kwargs): + def get_document_bookmarks(self, name, **kwargs): """ - Read document polyline annotations. + Read document bookmarks tree. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_poly_line_annotations(name, callback=callback_function) + >>> thread = api.get_document_bookmarks(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str folder: The document folder. :param str storage: The document storage. + :return: BookmarksResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_document_bookmarks_with_http_info(name, **kwargs) + else: + (data) = self.get_document_bookmarks_with_http_info(name, **kwargs) + return data + + def get_document_bookmarks_with_http_info(self, name, **kwargs): + """ + Read document bookmarks tree. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_document_bookmarks_with_http_info(name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) :param str folder: The document folder. - :return: PolyLineAnnotationsResponse + :param str storage: The document storage. + :return: BookmarksResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'folder', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_document_bookmarks" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_document_bookmarks`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'folder' in params: + query_params.append(('folder', params['folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/bookmarks/tree', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='BookmarksResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_document_caret_annotations(self, name, **kwargs): + """ + Read document caret annotations. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_document_caret_annotations(name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: CaretAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_poly_line_annotations_with_http_info(name, **kwargs) + return self.get_document_caret_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_poly_line_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_caret_annotations_with_http_info(name, **kwargs) return data - def get_document_poly_line_annotations_with_http_info(self, name, **kwargs): + def get_document_caret_annotations_with_http_info(self, name, **kwargs): """ - Read document polyline annotations. + Read document caret annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_poly_line_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_caret_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PolyLineAnnotationsResponse + :return: CaretAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4018,13 +4165,13 @@ def get_document_poly_line_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_poly_line_annotations" % key + " to method get_document_caret_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_poly_line_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_caret_annotations`") collection_formats = {} @@ -4054,16 +4201,16 @@ def get_document_poly_line_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/polyline', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/caret', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='PolyLineAnnotationsResponse', + response_type='CaretAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4071,50 +4218,50 @@ def get_document_poly_line_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_polygon_annotations(self, name, **kwargs): + def get_document_circle_annotations(self, name, **kwargs): """ - Read document polygon annotations. + Read document circle annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_polygon_annotations(name, callback=callback_function) + >>> thread = api.get_document_circle_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PolygonAnnotationsResponse + :return: CircleAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_polygon_annotations_with_http_info(name, **kwargs) + return self.get_document_circle_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_polygon_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_circle_annotations_with_http_info(name, **kwargs) return data - def get_document_polygon_annotations_with_http_info(self, name, **kwargs): + def get_document_circle_annotations_with_http_info(self, name, **kwargs): """ - Read document polygon annotations. + Read document circle annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_polygon_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_circle_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PolygonAnnotationsResponse + :return: CircleAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4130,13 +4277,13 @@ def get_document_polygon_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_polygon_annotations" % key + " to method get_document_circle_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_polygon_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_circle_annotations`") collection_formats = {} @@ -4166,16 +4313,16 @@ def get_document_polygon_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/polygon', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/circle', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='PolygonAnnotationsResponse', + response_type='CircleAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4183,50 +4330,50 @@ def get_document_polygon_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_popup_annotations(self, name, **kwargs): + def get_document_file_attachment_annotations(self, name, **kwargs): """ - Read document popup annotations. + Read document FileAttachment annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_popup_annotations(name, callback=callback_function) + >>> thread = api.get_document_file_attachment_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PopupAnnotationsResponse + :return: FileAttachmentAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_popup_annotations_with_http_info(name, **kwargs) + return self.get_document_file_attachment_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_popup_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_file_attachment_annotations_with_http_info(name, **kwargs) return data - def get_document_popup_annotations_with_http_info(self, name, **kwargs): + def get_document_file_attachment_annotations_with_http_info(self, name, **kwargs): """ - Read document popup annotations. + Read document FileAttachment annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_popup_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_file_attachment_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PopupAnnotationsResponse + :return: FileAttachmentAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4242,13 +4389,13 @@ def get_document_popup_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_popup_annotations" % key + " to method get_document_file_attachment_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_popup_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_file_attachment_annotations`") collection_formats = {} @@ -4278,16 +4425,16 @@ def get_document_popup_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/popup', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/fileattachment', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='PopupAnnotationsResponse', + response_type='FileAttachmentAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4295,57 +4442,55 @@ def get_document_popup_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_popup_annotations_by_parent(self, name, annotation_id, **kwargs): + def get_document_free_text_annotations(self, name, **kwargs): """ - Read document popup annotations by parent id. + Read document free text annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_popup_annotations_by_parent(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_free_text_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The parent annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PopupAnnotationsResponse + :return: FreeTextAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_popup_annotations_by_parent_with_http_info(name, annotation_id, **kwargs) + return self.get_document_free_text_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_popup_annotations_by_parent_with_http_info(name, annotation_id, **kwargs) + (data) = self.get_document_free_text_annotations_with_http_info(name, **kwargs) return data - def get_document_popup_annotations_by_parent_with_http_info(self, name, annotation_id, **kwargs): + def get_document_free_text_annotations_with_http_info(self, name, **kwargs): """ - Read document popup annotations by parent id. + Read document free text annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_popup_annotations_by_parent_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_free_text_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The parent annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: PopupAnnotationsResponse + :return: FreeTextAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4356,16 +4501,13 @@ def get_document_popup_annotations_by_parent_with_http_info(self, name, annotati if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_popup_annotations_by_parent" % key + " to method get_document_free_text_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_popup_annotations_by_parent`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_document_popup_annotations_by_parent`") + raise ValueError("Missing the required parameter `name` when calling `get_document_free_text_annotations`") collection_formats = {} @@ -4373,8 +4515,6 @@ def get_document_popup_annotations_by_parent_with_http_info(self, name, annotati path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -4397,16 +4537,16 @@ def get_document_popup_annotations_by_parent_with_http_info(self, name, annotati select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/{annotationId}/popup', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/freetext', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='PopupAnnotationsResponse', + response_type='FreeTextAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4414,50 +4554,50 @@ def get_document_popup_annotations_by_parent_with_http_info(self, name, annotati _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_properties(self, name, **kwargs): + def get_document_highlight_annotations(self, name, **kwargs): """ - Read document properties. + Read document highlight annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_properties(name, callback=callback_function) + >>> thread = api.get_document_highlight_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str storage: - :param str folder: - :return: DocumentPropertiesResponse + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: HighlightAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_properties_with_http_info(name, **kwargs) + return self.get_document_highlight_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_properties_with_http_info(name, **kwargs) + (data) = self.get_document_highlight_annotations_with_http_info(name, **kwargs) return data - def get_document_properties_with_http_info(self, name, **kwargs): + def get_document_highlight_annotations_with_http_info(self, name, **kwargs): """ - Read document properties. + Read document highlight annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_properties_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_highlight_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str storage: - :param str folder: - :return: DocumentPropertiesResponse + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: HighlightAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4473,13 +4613,13 @@ def get_document_properties_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_properties" % key + " to method get_document_highlight_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_properties`") + raise ValueError("Missing the required parameter `name` when calling `get_document_highlight_annotations`") collection_formats = {} @@ -4509,16 +4649,16 @@ def get_document_properties_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/documentproperties', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/highlight', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='DocumentPropertiesResponse', + response_type='HighlightAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4526,57 +4666,55 @@ def get_document_properties_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_property(self, name, property_name, **kwargs): + def get_document_ink_annotations(self, name, **kwargs): """ - Read document property by name. + Read document ink annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_property(name, property_name, callback=callback_function) + >>> thread = api.get_document_ink_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str property_name: (required) - :param str storage: - :param str folder: - :return: DocumentPropertyResponse + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: InkAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_property_with_http_info(name, property_name, **kwargs) + return self.get_document_ink_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_property_with_http_info(name, property_name, **kwargs) + (data) = self.get_document_ink_annotations_with_http_info(name, **kwargs) return data - def get_document_property_with_http_info(self, name, property_name, **kwargs): + def get_document_ink_annotations_with_http_info(self, name, **kwargs): """ - Read document property by name. + Read document ink annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_property_with_http_info(name, property_name, callback=callback_function) + >>> thread = api.get_document_ink_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: (required) - :param str property_name: (required) - :param str storage: - :param str folder: - :return: DocumentPropertyResponse + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: InkAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'property_name', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4587,16 +4725,13 @@ def get_document_property_with_http_info(self, name, property_name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_property" % key + " to method get_document_ink_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_property`") - # verify the required parameter 'property_name' is set - if ('property_name' not in params) or (params['property_name'] is None): - raise ValueError("Missing the required parameter `property_name` when calling `get_document_property`") + raise ValueError("Missing the required parameter `name` when calling `get_document_ink_annotations`") collection_formats = {} @@ -4604,8 +4739,6 @@ def get_document_property_with_http_info(self, name, property_name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'property_name' in params: - path_params['propertyName'] = params['property_name'] query_params = [] if 'storage' in params: @@ -4628,16 +4761,16 @@ def get_document_property_with_http_info(self, name, property_name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/documentproperties/{propertyName}', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/ink', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='DocumentPropertyResponse', + response_type='InkAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4645,50 +4778,50 @@ def get_document_property_with_http_info(self, name, property_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_redaction_annotations(self, name, **kwargs): + def get_document_line_annotations(self, name, **kwargs): """ - Read document redaction annotations. + Read document line annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_redaction_annotations(name, callback=callback_function) + >>> thread = api.get_document_line_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: RedactionAnnotationsResponse + :return: LineAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_redaction_annotations_with_http_info(name, **kwargs) + return self.get_document_line_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_redaction_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_line_annotations_with_http_info(name, **kwargs) return data - def get_document_redaction_annotations_with_http_info(self, name, **kwargs): + def get_document_line_annotations_with_http_info(self, name, **kwargs): """ - Read document redaction annotations. + Read document line annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_redaction_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_line_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: RedactionAnnotationsResponse + :return: LineAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4704,13 +4837,13 @@ def get_document_redaction_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_redaction_annotations" % key + " to method get_document_line_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_redaction_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_line_annotations`") collection_formats = {} @@ -4740,16 +4873,16 @@ def get_document_redaction_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/redaction', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/line', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='RedactionAnnotationsResponse', + response_type='LineAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4757,50 +4890,50 @@ def get_document_redaction_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_screen_annotations(self, name, **kwargs): + def get_document_movie_annotations(self, name, **kwargs): """ - Read document screen annotations. + Read document movie annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_screen_annotations(name, callback=callback_function) + >>> thread = api.get_document_movie_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: ScreenAnnotationsResponse + :return: MovieAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_screen_annotations_with_http_info(name, **kwargs) + return self.get_document_movie_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_screen_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_movie_annotations_with_http_info(name, **kwargs) return data - def get_document_screen_annotations_with_http_info(self, name, **kwargs): + def get_document_movie_annotations_with_http_info(self, name, **kwargs): """ - Read document screen annotations. + Read document movie annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_screen_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_movie_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: ScreenAnnotationsResponse + :return: MovieAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4816,13 +4949,13 @@ def get_document_screen_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_screen_annotations" % key + " to method get_document_movie_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_screen_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_movie_annotations`") collection_formats = {} @@ -4852,16 +4985,16 @@ def get_document_screen_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/screen', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/movie', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='ScreenAnnotationsResponse', + response_type='MovieAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4869,50 +5002,50 @@ def get_document_screen_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_sound_annotations(self, name, **kwargs): + def get_document_poly_line_annotations(self, name, **kwargs): """ - Read document sound annotations. + Read document polyline annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_sound_annotations(name, callback=callback_function) + >>> thread = api.get_document_poly_line_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: SoundAnnotationsResponse + :return: PolyLineAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_sound_annotations_with_http_info(name, **kwargs) + return self.get_document_poly_line_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_sound_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_poly_line_annotations_with_http_info(name, **kwargs) return data - def get_document_sound_annotations_with_http_info(self, name, **kwargs): + def get_document_poly_line_annotations_with_http_info(self, name, **kwargs): """ - Read document sound annotations. + Read document polyline annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_sound_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_poly_line_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: SoundAnnotationsResponse + :return: PolyLineAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -4928,13 +5061,13 @@ def get_document_sound_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_sound_annotations" % key + " to method get_document_poly_line_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_sound_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_poly_line_annotations`") collection_formats = {} @@ -4964,16 +5097,16 @@ def get_document_sound_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/sound', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/polyline', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='SoundAnnotationsResponse', + response_type='PolyLineAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4981,50 +5114,50 @@ def get_document_sound_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_square_annotations(self, name, **kwargs): + def get_document_polygon_annotations(self, name, **kwargs): """ - Read document square annotations. + Read document polygon annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_square_annotations(name, callback=callback_function) + >>> thread = api.get_document_polygon_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: SquareAnnotationsResponse + :return: PolygonAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_square_annotations_with_http_info(name, **kwargs) + return self.get_document_polygon_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_square_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_polygon_annotations_with_http_info(name, **kwargs) return data - def get_document_square_annotations_with_http_info(self, name, **kwargs): + def get_document_polygon_annotations_with_http_info(self, name, **kwargs): """ - Read document square annotations. + Read document polygon annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_square_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_polygon_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: SquareAnnotationsResponse + :return: PolygonAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -5040,13 +5173,13 @@ def get_document_square_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_square_annotations" % key + " to method get_document_polygon_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_square_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_polygon_annotations`") collection_formats = {} @@ -5076,16 +5209,16 @@ def get_document_square_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/square', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/polygon', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='SquareAnnotationsResponse', + response_type='PolygonAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5093,50 +5226,50 @@ def get_document_square_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_squiggly_annotations(self, name, **kwargs): + def get_document_popup_annotations(self, name, **kwargs): """ - Read document squiggly annotations. + Read document popup annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_squiggly_annotations(name, callback=callback_function) + >>> thread = api.get_document_popup_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: SquigglyAnnotationsResponse + :return: PopupAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_squiggly_annotations_with_http_info(name, **kwargs) + return self.get_document_popup_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_squiggly_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_popup_annotations_with_http_info(name, **kwargs) return data - def get_document_squiggly_annotations_with_http_info(self, name, **kwargs): + def get_document_popup_annotations_with_http_info(self, name, **kwargs): """ - Read document squiggly annotations. + Read document popup annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_squiggly_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_popup_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: SquigglyAnnotationsResponse + :return: PopupAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -5152,13 +5285,13 @@ def get_document_squiggly_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_squiggly_annotations" % key + " to method get_document_popup_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_squiggly_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_popup_annotations`") collection_formats = {} @@ -5188,128 +5321,16 @@ def get_document_squiggly_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/squiggly', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='SquigglyAnnotationsResponse', - auth_settings=auth_settings, - callback=params.get('callback'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_document_stamp_annotations(self, name, **kwargs): - """ - Read document stamp annotations. - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please define a `callback` function - to be invoked when receiving the response. - >>> def callback_function(response): - >>> pprint(response) - >>> - >>> thread = api.get_document_stamp_annotations(name, callback=callback_function) - - :param callback function: The callback function - for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: StampAnnotationsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('callback'): - return self.get_document_stamp_annotations_with_http_info(name, **kwargs) - else: - (data) = self.get_document_stamp_annotations_with_http_info(name, **kwargs) - return data - - def get_document_stamp_annotations_with_http_info(self, name, **kwargs): - """ - Read document stamp annotations. - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please define a `callback` function - to be invoked when receiving the response. - >>> def callback_function(response): - >>> pprint(response) - >>> - >>> thread = api.get_document_stamp_annotations_with_http_info(name, callback=callback_function) - - :param callback function: The callback function - for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: StampAnnotationsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['name', 'storage', 'folder'] - all_params.append('callback') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_document_stamp_annotations" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_stamp_annotations`") - - - collection_formats = {} - - path_params = {} - if 'name' in params: - path_params['name'] = params['name'] - - query_params = [] - if 'storage' in params: - query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.\ - select_header_accept(['application/json']) - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['application/json']) - - # Authentication setting - auth_settings = [] - - return self.api_client.call_api('/pdf/{name}/annotations/stamp', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/popup', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='StampAnnotationsResponse', + response_type='PopupAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5317,55 +5338,57 @@ def get_document_stamp_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_stamps(self, name, **kwargs): + def get_document_popup_annotations_by_parent(self, name, annotation_id, **kwargs): """ - Read document stamps. + Read document popup annotations by parent id. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_stamps(name, callback=callback_function) + >>> thread = api.get_document_popup_annotations_by_parent(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The parent annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: StampsInfoResponse + :return: PopupAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_stamps_with_http_info(name, **kwargs) + return self.get_document_popup_annotations_by_parent_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.get_document_stamps_with_http_info(name, **kwargs) + (data) = self.get_document_popup_annotations_by_parent_with_http_info(name, annotation_id, **kwargs) return data - def get_document_stamps_with_http_info(self, name, **kwargs): + def get_document_popup_annotations_by_parent_with_http_info(self, name, annotation_id, **kwargs): """ - Read document stamps. + Read document popup annotations by parent id. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_stamps_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_popup_annotations_by_parent_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) + :param str annotation_id: The parent annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: StampsInfoResponse + :return: PopupAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'annotation_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5376,13 +5399,16 @@ def get_document_stamps_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_stamps" % key + " to method get_document_popup_annotations_by_parent" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_stamps`") + raise ValueError("Missing the required parameter `name` when calling `get_document_popup_annotations_by_parent`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_document_popup_annotations_by_parent`") collection_formats = {} @@ -5390,6 +5416,8 @@ def get_document_stamps_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -5412,16 +5440,16 @@ def get_document_stamps_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/stamps', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/{annotationId}/popup', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='StampsInfoResponse', + response_type='PopupAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5429,50 +5457,50 @@ def get_document_stamps_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_strike_out_annotations(self, name, **kwargs): + def get_document_properties(self, name, **kwargs): """ - Read document StrikeOut annotations. + Read document properties. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_strike_out_annotations(name, callback=callback_function) + >>> thread = api.get_document_properties(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: StrikeOutAnnotationsResponse + :param str name: (required) + :param str storage: + :param str folder: + :return: DocumentPropertiesResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_strike_out_annotations_with_http_info(name, **kwargs) + return self.get_document_properties_with_http_info(name, **kwargs) else: - (data) = self.get_document_strike_out_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_properties_with_http_info(name, **kwargs) return data - def get_document_strike_out_annotations_with_http_info(self, name, **kwargs): + def get_document_properties_with_http_info(self, name, **kwargs): """ - Read document StrikeOut annotations. + Read document properties. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_strike_out_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_properties_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: StrikeOutAnnotationsResponse + :param str name: (required) + :param str storage: + :param str folder: + :return: DocumentPropertiesResponse If the method is called asynchronously, returns the request thread. """ @@ -5488,13 +5516,13 @@ def get_document_strike_out_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_strike_out_annotations" % key + " to method get_document_properties" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_strike_out_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_properties`") collection_formats = {} @@ -5524,16 +5552,16 @@ def get_document_strike_out_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/strikeout', 'GET', + return self.api_client.call_api('/pdf/{name}/documentproperties', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='StrikeOutAnnotationsResponse', + response_type='DocumentPropertiesResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5541,55 +5569,57 @@ def get_document_strike_out_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_tables(self, name, **kwargs): + def get_document_property(self, name, property_name, **kwargs): """ - Read document tables. + Read document property by name. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_tables(name, callback=callback_function) + >>> thread = api.get_document_property(name, property_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: (required) + :param str property_name: (required) :param str storage: :param str folder: - :return: TablesRecognizedResponse + :return: DocumentPropertyResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_tables_with_http_info(name, **kwargs) + return self.get_document_property_with_http_info(name, property_name, **kwargs) else: - (data) = self.get_document_tables_with_http_info(name, **kwargs) + (data) = self.get_document_property_with_http_info(name, property_name, **kwargs) return data - def get_document_tables_with_http_info(self, name, **kwargs): + def get_document_property_with_http_info(self, name, property_name, **kwargs): """ - Read document tables. + Read document property by name. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_tables_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_property_with_http_info(name, property_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: (required) + :param str property_name: (required) :param str storage: :param str folder: - :return: TablesRecognizedResponse + :return: DocumentPropertyResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['name', 'property_name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5600,13 +5630,16 @@ def get_document_tables_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_tables" % key + " to method get_document_property" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_tables`") + raise ValueError("Missing the required parameter `name` when calling `get_document_property`") + # verify the required parameter 'property_name' is set + if ('property_name' not in params) or (params['property_name'] is None): + raise ValueError("Missing the required parameter `property_name` when calling `get_document_property`") collection_formats = {} @@ -5614,6 +5647,8 @@ def get_document_tables_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'property_name' in params: + path_params['propertyName'] = params['property_name'] query_params = [] if 'storage' in params: @@ -5636,16 +5671,16 @@ def get_document_tables_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/tables', 'GET', + return self.api_client.call_api('/pdf/{name}/documentproperties/{propertyName}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='TablesRecognizedResponse', + response_type='DocumentPropertyResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5653,50 +5688,50 @@ def get_document_tables_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_text_annotations(self, name, **kwargs): + def get_document_redaction_annotations(self, name, **kwargs): """ - Read document text annotations. + Read document redaction annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_text_annotations(name, callback=callback_function) + >>> thread = api.get_document_redaction_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: TextAnnotationsResponse + :return: RedactionAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_text_annotations_with_http_info(name, **kwargs) + return self.get_document_redaction_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_text_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_redaction_annotations_with_http_info(name, **kwargs) return data - def get_document_text_annotations_with_http_info(self, name, **kwargs): + def get_document_redaction_annotations_with_http_info(self, name, **kwargs): """ - Read document text annotations. + Read document redaction annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_text_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_redaction_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: TextAnnotationsResponse + :return: RedactionAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -5712,13 +5747,13 @@ def get_document_text_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_text_annotations" % key + " to method get_document_redaction_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_text_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_redaction_annotations`") collection_formats = {} @@ -5748,16 +5783,16 @@ def get_document_text_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/text', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/redaction', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='TextAnnotationsResponse', + response_type='RedactionAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5765,50 +5800,50 @@ def get_document_text_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_document_underline_annotations(self, name, **kwargs): + def get_document_screen_annotations(self, name, **kwargs): """ - Read document underline annotations. + Read document screen annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_underline_annotations(name, callback=callback_function) + >>> thread = api.get_document_screen_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: UnderlineAnnotationsResponse + :return: ScreenAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_document_underline_annotations_with_http_info(name, **kwargs) + return self.get_document_screen_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_document_underline_annotations_with_http_info(name, **kwargs) + (data) = self.get_document_screen_annotations_with_http_info(name, **kwargs) return data - def get_document_underline_annotations_with_http_info(self, name, **kwargs): + def get_document_screen_annotations_with_http_info(self, name, **kwargs): """ - Read document underline annotations. + Read document screen annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_document_underline_annotations_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_screen_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: UnderlineAnnotationsResponse + :return: ScreenAnnotationsResponse If the method is called asynchronously, returns the request thread. """ @@ -5824,13 +5859,13 @@ def get_document_underline_annotations_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_document_underline_annotations" % key + " to method get_document_screen_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_document_underline_annotations`") + raise ValueError("Missing the required parameter `name` when calling `get_document_screen_annotations`") collection_formats = {} @@ -5860,16 +5895,16 @@ def get_document_underline_annotations_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/underline', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/screen', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='UnderlineAnnotationsResponse', + response_type='ScreenAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5877,55 +5912,55 @@ def get_document_underline_annotations_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_download(self, path, **kwargs): + def get_document_sound_annotations(self, name, **kwargs): """ - Download a specific file + Read document sound annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_download(path, callback=callback_function) + >>> thread = api.get_document_sound_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Path of the file including the file name and extension e.g. /file.ext (required) - :param str version_id: File's version - :param str storage: User's storage name - :return: file + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: SoundAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_download_with_http_info(path, **kwargs) + return self.get_document_sound_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_download_with_http_info(path, **kwargs) + (data) = self.get_document_sound_annotations_with_http_info(name, **kwargs) return data - def get_download_with_http_info(self, path, **kwargs): + def get_document_sound_annotations_with_http_info(self, name, **kwargs): """ - Download a specific file + Read document sound annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_download_with_http_info(path, callback=callback_function) + >>> thread = api.get_document_sound_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Path of the file including the file name and extension e.g. /file.ext (required) - :param str version_id: File's version - :param str storage: User's storage name - :return: file + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: SoundAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['path', 'version_id', 'storage'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5936,26 +5971,26 @@ def get_download_with_http_info(self, path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_download" % key + " to method get_document_sound_annotations" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'path' is set - if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `get_download`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_document_sound_annotations`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) - if 'version_id' in params: - query_params.append(('versionId', params['version_id'])) if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -5965,23 +6000,23 @@ def get_download_with_http_info(self, path, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/file', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/sound', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type='SoundAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5989,57 +6024,55 @@ def get_download_with_http_info(self, path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_download_document_attachment_by_index(self, name, attachment_index, **kwargs): + def get_document_square_annotations(self, name, **kwargs): """ - Download document attachment content by its index. + Read document square annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_download_document_attachment_by_index(name, attachment_index, callback=callback_function) + >>> thread = api.get_document_square_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int attachment_index: The attachment index. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: file + :return: SquareAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_download_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) + return self.get_document_square_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_download_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) + (data) = self.get_document_square_annotations_with_http_info(name, **kwargs) return data - def get_download_document_attachment_by_index_with_http_info(self, name, attachment_index, **kwargs): + def get_document_square_annotations_with_http_info(self, name, **kwargs): """ - Download document attachment content by its index. + Read document square annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_download_document_attachment_by_index_with_http_info(name, attachment_index, callback=callback_function) + >>> thread = api.get_document_square_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int attachment_index: The attachment index. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: file + :return: SquareAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'attachment_index', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6050,16 +6083,13 @@ def get_download_document_attachment_by_index_with_http_info(self, name, attachm if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_download_document_attachment_by_index" % key + " to method get_document_square_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_download_document_attachment_by_index`") - # verify the required parameter 'attachment_index' is set - if ('attachment_index' not in params) or (params['attachment_index'] is None): - raise ValueError("Missing the required parameter `attachment_index` when calling `get_download_document_attachment_by_index`") + raise ValueError("Missing the required parameter `name` when calling `get_document_square_annotations`") collection_formats = {} @@ -6067,8 +6097,6 @@ def get_download_document_attachment_by_index_with_http_info(self, name, attachm path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'attachment_index' in params: - path_params['attachmentIndex'] = params['attachment_index'] query_params = [] if 'storage' in params: @@ -6084,23 +6112,23 @@ def get_download_document_attachment_by_index_with_http_info(self, name, attachm body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/attachments/{attachmentIndex}/download', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/square', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type='SquareAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6108,53 +6136,55 @@ def get_download_document_attachment_by_index_with_http_info(self, name, attachm _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_epub_in_storage_to_pdf(self, src_path, **kwargs): + def get_document_squiggly_annotations(self, name, **kwargs): """ - Convert EPUB file (located on storage) to PDF format and return resulting file in response. + Read document squiggly annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_epub_in_storage_to_pdf(src_path, callback=callback_function) + >>> thread = api.get_document_squiggly_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str name: The document name. (required) :param str storage: The document storage. - :return: file + :param str folder: The document folder. + :return: SquigglyAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_epub_in_storage_to_pdf_with_http_info(src_path, **kwargs) + return self.get_document_squiggly_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_epub_in_storage_to_pdf_with_http_info(src_path, **kwargs) + (data) = self.get_document_squiggly_annotations_with_http_info(name, **kwargs) return data - def get_epub_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): + def get_document_squiggly_annotations_with_http_info(self, name, **kwargs): """ - Convert EPUB file (located on storage) to PDF format and return resulting file in response. + Read document squiggly annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_epub_in_storage_to_pdf_with_http_info(src_path, callback=callback_function) + >>> thread = api.get_document_squiggly_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str name: The document name. (required) :param str storage: The document storage. - :return: file + :param str folder: The document folder. + :return: SquigglyAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['src_path', 'storage'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6165,24 +6195,26 @@ def get_epub_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_epub_in_storage_to_pdf" % key + " to method get_document_squiggly_annotations" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'src_path' is set - if ('src_path' not in params) or (params['src_path'] is None): - raise ValueError("Missing the required parameter `src_path` when calling `get_epub_in_storage_to_pdf`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_document_squiggly_annotations`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'src_path' in params: - query_params.append(('srcPath', params['src_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -6192,23 +6224,23 @@ def get_epub_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/create/epub', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/squiggly', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type='SquigglyAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6216,57 +6248,55 @@ def get_epub_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_field(self, name, field_name, **kwargs): + def get_document_stamp_annotations(self, name, **kwargs): """ - Get document field by name. + Read document stamp annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_field(name, field_name, callback=callback_function) + >>> thread = api.get_document_stamp_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str field_name: The field name/ (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FieldResponse + :return: StampAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_field_with_http_info(name, field_name, **kwargs) + return self.get_document_stamp_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_field_with_http_info(name, field_name, **kwargs) + (data) = self.get_document_stamp_annotations_with_http_info(name, **kwargs) return data - def get_field_with_http_info(self, name, field_name, **kwargs): + def get_document_stamp_annotations_with_http_info(self, name, **kwargs): """ - Get document field by name. + Read document stamp annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_field_with_http_info(name, field_name, callback=callback_function) + >>> thread = api.get_document_stamp_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str field_name: The field name/ (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FieldResponse + :return: StampAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'field_name', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6277,16 +6307,13 @@ def get_field_with_http_info(self, name, field_name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_field" % key + " to method get_document_stamp_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_field`") - # verify the required parameter 'field_name' is set - if ('field_name' not in params) or (params['field_name'] is None): - raise ValueError("Missing the required parameter `field_name` when calling `get_field`") + raise ValueError("Missing the required parameter `name` when calling `get_document_stamp_annotations`") collection_formats = {} @@ -6294,8 +6321,6 @@ def get_field_with_http_info(self, name, field_name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'field_name' in params: - path_params['fieldName'] = params['field_name'] query_params = [] if 'storage' in params: @@ -6318,16 +6343,16 @@ def get_field_with_http_info(self, name, field_name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/fields/{fieldName}', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/stamp', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FieldResponse', + response_type='StampAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6335,50 +6360,50 @@ def get_field_with_http_info(self, name, field_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_fields(self, name, **kwargs): + def get_document_stamps(self, name, **kwargs): """ - Get document fields. + Read document stamps. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_fields(name, callback=callback_function) + >>> thread = api.get_document_stamps(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FieldsResponse + :return: StampsInfoResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_fields_with_http_info(name, **kwargs) + return self.get_document_stamps_with_http_info(name, **kwargs) else: - (data) = self.get_fields_with_http_info(name, **kwargs) + (data) = self.get_document_stamps_with_http_info(name, **kwargs) return data - def get_fields_with_http_info(self, name, **kwargs): + def get_document_stamps_with_http_info(self, name, **kwargs): """ - Get document fields. + Read document stamps. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_fields_with_http_info(name, callback=callback_function) + >>> thread = api.get_document_stamps_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FieldsResponse + :return: StampsInfoResponse If the method is called asynchronously, returns the request thread. """ @@ -6394,13 +6419,13 @@ def get_fields_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_fields" % key + " to method get_document_stamps" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_fields`") + raise ValueError("Missing the required parameter `name` when calling `get_document_stamps`") collection_formats = {} @@ -6430,16 +6455,16 @@ def get_fields_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/fields', 'GET', + return self.api_client.call_api('/pdf/{name}/stamps', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FieldsResponse', + response_type='StampsInfoResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6447,57 +6472,55 @@ def get_fields_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_file_attachment_annotation(self, name, annotation_id, **kwargs): + def get_document_strike_out_annotations(self, name, **kwargs): """ - Read document page FileAttachment annotation by ID. + Read document StrikeOut annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_file_attachment_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_strike_out_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FileAttachmentAnnotationResponse + :return: StrikeOutAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_file_attachment_annotation_with_http_info(name, annotation_id, **kwargs) + return self.get_document_strike_out_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_file_attachment_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.get_document_strike_out_annotations_with_http_info(name, **kwargs) return data - def get_file_attachment_annotation_with_http_info(self, name, annotation_id, **kwargs): + def get_document_strike_out_annotations_with_http_info(self, name, **kwargs): """ - Read document page FileAttachment annotation by ID. + Read document StrikeOut annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_file_attachment_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_strike_out_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FileAttachmentAnnotationResponse + :return: StrikeOutAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6508,16 +6531,13 @@ def get_file_attachment_annotation_with_http_info(self, name, annotation_id, **k if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_file_attachment_annotation" % key + " to method get_document_strike_out_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_file_attachment_annotation`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_file_attachment_annotation`") + raise ValueError("Missing the required parameter `name` when calling `get_document_strike_out_annotations`") collection_formats = {} @@ -6525,8 +6545,6 @@ def get_file_attachment_annotation_with_http_info(self, name, annotation_id, **k path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -6542,23 +6560,23 @@ def get_file_attachment_annotation_with_http_info(self, name, annotation_id, **k body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/fileattachment/{annotationId}', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/strikeout', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FileAttachmentAnnotationResponse', + response_type='StrikeOutAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6566,57 +6584,55 @@ def get_file_attachment_annotation_with_http_info(self, name, annotation_id, **k _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_file_attachment_annotation_data(self, name, annotation_id, **kwargs): + def get_document_tables(self, name, **kwargs): """ - Read document page FileAttachment annotation by ID. + Read document tables. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_file_attachment_annotation_data(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_tables(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: file + :param str name: (required) + :param str storage: + :param str folder: + :return: TablesRecognizedResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_file_attachment_annotation_data_with_http_info(name, annotation_id, **kwargs) + return self.get_document_tables_with_http_info(name, **kwargs) else: - (data) = self.get_file_attachment_annotation_data_with_http_info(name, annotation_id, **kwargs) + (data) = self.get_document_tables_with_http_info(name, **kwargs) return data - def get_file_attachment_annotation_data_with_http_info(self, name, annotation_id, **kwargs): + def get_document_tables_with_http_info(self, name, **kwargs): """ - Read document page FileAttachment annotation by ID. + Read document tables. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_file_attachment_annotation_data_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_tables_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) - :param str storage: The document storage. - :param str folder: The document folder. - :return: file + :param str name: (required) + :param str storage: + :param str folder: + :return: TablesRecognizedResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6627,16 +6643,13 @@ def get_file_attachment_annotation_data_with_http_info(self, name, annotation_id if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_file_attachment_annotation_data" % key + " to method get_document_tables" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_file_attachment_annotation_data`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_file_attachment_annotation_data`") + raise ValueError("Missing the required parameter `name` when calling `get_document_tables`") collection_formats = {} @@ -6644,8 +6657,6 @@ def get_file_attachment_annotation_data_with_http_info(self, name, annotation_id path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -6661,23 +6672,23 @@ def get_file_attachment_annotation_data_with_http_info(self, name, annotation_id body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/fileattachment/{annotationId}/data', 'GET', + return self.api_client.call_api('/pdf/{name}/tables', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type='TablesRecognizedResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6685,57 +6696,55 @@ def get_file_attachment_annotation_data_with_http_info(self, name, annotation_id _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_free_text_annotation(self, name, annotation_id, **kwargs): + def get_document_text_annotations(self, name, **kwargs): """ - Read document page free text annotation by ID. + Read document text annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_free_text_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_text_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FreeTextAnnotationResponse + :return: TextAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_free_text_annotation_with_http_info(name, annotation_id, **kwargs) + return self.get_document_text_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_free_text_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.get_document_text_annotations_with_http_info(name, **kwargs) return data - def get_free_text_annotation_with_http_info(self, name, annotation_id, **kwargs): + def get_document_text_annotations_with_http_info(self, name, **kwargs): """ - Read document page free text annotation by ID. + Read document text annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_free_text_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_text_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: FreeTextAnnotationResponse + :return: TextAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6746,16 +6755,13 @@ def get_free_text_annotation_with_http_info(self, name, annotation_id, **kwargs) if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_free_text_annotation" % key + " to method get_document_text_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_free_text_annotation`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_free_text_annotation`") + raise ValueError("Missing the required parameter `name` when calling `get_document_text_annotations`") collection_formats = {} @@ -6763,8 +6769,6 @@ def get_free_text_annotation_with_http_info(self, name, annotation_id, **kwargs) path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -6787,16 +6791,16 @@ def get_free_text_annotation_with_http_info(self, name, annotation_id, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/freetext/{annotationId}', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/text', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FreeTextAnnotationResponse', + response_type='TextAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6804,57 +6808,55 @@ def get_free_text_annotation_with_http_info(self, name, annotation_id, **kwargs) _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_highlight_annotation(self, name, annotation_id, **kwargs): + def get_document_underline_annotations(self, name, **kwargs): """ - Read document page highlight annotation by ID. + Read document underline annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_highlight_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_underline_annotations(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: HighlightAnnotationResponse + :return: UnderlineAnnotationsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_highlight_annotation_with_http_info(name, annotation_id, **kwargs) + return self.get_document_underline_annotations_with_http_info(name, **kwargs) else: - (data) = self.get_highlight_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.get_document_underline_annotations_with_http_info(name, **kwargs) return data - def get_highlight_annotation_with_http_info(self, name, annotation_id, **kwargs): + def get_document_underline_annotations_with_http_info(self, name, **kwargs): """ - Read document page highlight annotation by ID. + Read document underline annotations. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_highlight_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.get_document_underline_annotations_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: HighlightAnnotationResponse + :return: UnderlineAnnotationsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6865,16 +6867,13 @@ def get_highlight_annotation_with_http_info(self, name, annotation_id, **kwargs) if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_highlight_annotation" % key + " to method get_document_underline_annotations" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_highlight_annotation`") - # verify the required parameter 'annotation_id' is set - if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_highlight_annotation`") + raise ValueError("Missing the required parameter `name` when calling `get_document_underline_annotations`") collection_formats = {} @@ -6882,8 +6881,6 @@ def get_highlight_annotation_with_http_info(self, name, annotation_id, **kwargs) path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'annotation_id' in params: - path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -6906,16 +6903,16 @@ def get_highlight_annotation_with_http_info(self, name, annotation_id, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/highlight/{annotationId}', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/underline', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='HighlightAnnotationResponse', + response_type='UnderlineAnnotationsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6923,69 +6920,57 @@ def get_highlight_annotation_with_http_info(self, name, annotation_id, **kwargs) _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_html_in_storage_to_pdf(self, src_path, **kwargs): + def get_download_document_attachment_by_index(self, name, attachment_index, **kwargs): """ - Convert HTML file (located on storage) to PDF format and return resulting file in response. + Download document attachment content by its index. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_html_in_storage_to_pdf(src_path, callback=callback_function) + >>> thread = api.get_download_document_attachment_by_index(name, attachment_index, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src_path: Full source filename (ex. /folder1/folder2/template.zip) (required) - :param str html_file_name: Name of HTML file in ZIP. - :param float height: Page height - :param float width: Page width - :param bool is_landscape: Is page landscaped - :param float margin_left: Page margin left - :param float margin_bottom: Page margin bottom - :param float margin_right: Page margin right - :param float margin_top: Page margin top + :param str name: The document name. (required) + :param int attachment_index: The attachment index. (required) :param str storage: The document storage. + :param str folder: The document folder. :return: file If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_html_in_storage_to_pdf_with_http_info(src_path, **kwargs) + return self.get_download_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) else: - (data) = self.get_html_in_storage_to_pdf_with_http_info(src_path, **kwargs) + (data) = self.get_download_document_attachment_by_index_with_http_info(name, attachment_index, **kwargs) return data - def get_html_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): + def get_download_document_attachment_by_index_with_http_info(self, name, attachment_index, **kwargs): """ - Convert HTML file (located on storage) to PDF format and return resulting file in response. + Download document attachment content by its index. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_html_in_storage_to_pdf_with_http_info(src_path, callback=callback_function) + >>> thread = api.get_download_document_attachment_by_index_with_http_info(name, attachment_index, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src_path: Full source filename (ex. /folder1/folder2/template.zip) (required) - :param str html_file_name: Name of HTML file in ZIP. - :param float height: Page height - :param float width: Page width - :param bool is_landscape: Is page landscaped - :param float margin_left: Page margin left - :param float margin_bottom: Page margin bottom - :param float margin_right: Page margin right - :param float margin_top: Page margin top + :param str name: The document name. (required) + :param int attachment_index: The attachment index. (required) :param str storage: The document storage. + :param str folder: The document folder. :return: file If the method is called asynchronously, returns the request thread. """ - all_params = ['src_path', 'html_file_name', 'height', 'width', 'is_landscape', 'margin_left', 'margin_bottom', 'margin_right', 'margin_top', 'storage'] + all_params = ['name', 'attachment_index', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6996,13 +6981,128 @@ def get_html_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_html_in_storage_to_pdf" % key + " to method get_download_document_attachment_by_index" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_download_document_attachment_by_index`") + # verify the required parameter 'attachment_index' is set + if ('attachment_index' not in params) or (params['attachment_index'] is None): + raise ValueError("Missing the required parameter `attachment_index` when calling `get_download_document_attachment_by_index`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'attachment_index' in params: + path_params['attachmentIndex'] = params['attachment_index'] + + query_params = [] + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/attachments/{attachmentIndex}/download', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_epub_in_storage_to_pdf(self, src_path, **kwargs): + """ + Convert EPUB file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_epub_in_storage_to_pdf(src_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str storage: The document storage. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_epub_in_storage_to_pdf_with_http_info(src_path, **kwargs) + else: + (data) = self.get_epub_in_storage_to_pdf_with_http_info(src_path, **kwargs) + return data + + def get_epub_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): + """ + Convert EPUB file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_epub_in_storage_to_pdf_with_http_info(src_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str storage: The document storage. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['src_path', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_epub_in_storage_to_pdf" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'src_path' is set if ('src_path' not in params) or (params['src_path'] is None): - raise ValueError("Missing the required parameter `src_path` when calling `get_html_in_storage_to_pdf`") + raise ValueError("Missing the required parameter `src_path` when calling `get_epub_in_storage_to_pdf`") collection_formats = {} @@ -7012,22 +7112,6 @@ def get_html_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): query_params = [] if 'src_path' in params: query_params.append(('srcPath', params['src_path'])) - if 'html_file_name' in params: - query_params.append(('htmlFileName', params['html_file_name'])) - if 'height' in params: - query_params.append(('height', params['height'])) - if 'width' in params: - query_params.append(('width', params['width'])) - if 'is_landscape' in params: - query_params.append(('isLandscape', params['is_landscape'])) - if 'margin_left' in params: - query_params.append(('marginLeft', params['margin_left'])) - if 'margin_bottom' in params: - query_params.append(('marginBottom', params['margin_bottom'])) - if 'margin_right' in params: - query_params.append(('marginRight', params['margin_right'])) - if 'margin_top' in params: - query_params.append(('marginTop', params['margin_top'])) if 'storage' in params: query_params.append(('storage', params['storage'])) @@ -7046,9 +7130,9 @@ def get_html_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/create/html', 'GET', + return self.api_client.call_api('/pdf/create/epub', 'GET', path_params, query_params, header_params, @@ -7063,57 +7147,55 @@ def get_html_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_image(self, name, image_id, **kwargs): + def get_export_fields_from_pdf_to_fdf_in_storage(self, name, **kwargs): """ - Read document image by ID. + Export fields from from PDF in storage to FDF file. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image(name, image_id, callback=callback_function) + >>> thread = api.get_export_fields_from_pdf_to_fdf_in_storage(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: ImageResponse + :return: file If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_image_with_http_info(name, image_id, **kwargs) + return self.get_export_fields_from_pdf_to_fdf_in_storage_with_http_info(name, **kwargs) else: - (data) = self.get_image_with_http_info(name, image_id, **kwargs) + (data) = self.get_export_fields_from_pdf_to_fdf_in_storage_with_http_info(name, **kwargs) return data - def get_image_with_http_info(self, name, image_id, **kwargs): + def get_export_fields_from_pdf_to_fdf_in_storage_with_http_info(self, name, **kwargs): """ - Read document image by ID. + Export fields from from PDF in storage to FDF file. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.get_export_fields_from_pdf_to_fdf_in_storage_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: ImageResponse + :return: file If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'image_id', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7124,16 +7206,13 @@ def get_image_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_image" % key + " to method get_export_fields_from_pdf_to_fdf_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_image`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `get_image`") + raise ValueError("Missing the required parameter `name` when calling `get_export_fields_from_pdf_to_fdf_in_storage`") collection_formats = {} @@ -7141,8 +7220,6 @@ def get_image_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] query_params = [] if 'storage' in params: @@ -7165,16 +7242,16 @@ def get_image_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}', 'GET', + return self.api_client.call_api('/pdf/{name}/export/fdf', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='ImageResponse', + response_type='file', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7182,23 +7259,20 @@ def get_image_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_image_extract_as_gif(self, name, image_id, **kwargs): + def get_export_fields_from_pdf_to_xfdf_in_storage(self, name, **kwargs): """ - Extract document image in GIF format + Export fields from from PDF in storage to XFDF file. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_gif(name, image_id, callback=callback_function) + >>> thread = api.get_export_fields_from_pdf_to_xfdf_in_storage(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. :param str storage: The document storage. :param str folder: The document folder. :return: file @@ -7207,28 +7281,25 @@ def get_image_extract_as_gif(self, name, image_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_image_extract_as_gif_with_http_info(name, image_id, **kwargs) + return self.get_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(name, **kwargs) else: - (data) = self.get_image_extract_as_gif_with_http_info(name, image_id, **kwargs) + (data) = self.get_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(name, **kwargs) return data - def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): + def get_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(self, name, **kwargs): """ - Extract document image in GIF format + Export fields from from PDF in storage to XFDF file. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_gif_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.get_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. :param str storage: The document storage. :param str folder: The document folder. :return: file @@ -7236,7 +7307,7 @@ def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): returns the request thread. """ - all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7247,16 +7318,13 @@ def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_image_extract_as_gif" % key + " to method get_export_fields_from_pdf_to_xfdf_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_gif`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_gif`") + raise ValueError("Missing the required parameter `name` when calling `get_export_fields_from_pdf_to_xfdf_in_storage`") collection_formats = {} @@ -7264,14 +7332,8 @@ def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -7292,9 +7354,9 @@ def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/gif', 'GET', + return self.api_client.call_api('/pdf/{name}/export/xfdf', 'GET', path_params, query_params, header_params, @@ -7309,23 +7371,20 @@ def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_image_extract_as_jpeg(self, name, image_id, **kwargs): + def get_export_fields_from_pdf_to_xml_in_storage(self, name, **kwargs): """ - Extract document image in JPEG format + Export fields from from PDF in storage to XML file. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_jpeg(name, image_id, callback=callback_function) + >>> thread = api.get_export_fields_from_pdf_to_xml_in_storage(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. :param str storage: The document storage. :param str folder: The document folder. :return: file @@ -7334,28 +7393,25 @@ def get_image_extract_as_jpeg(self, name, image_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + return self.get_export_fields_from_pdf_to_xml_in_storage_with_http_info(name, **kwargs) else: - (data) = self.get_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + (data) = self.get_export_fields_from_pdf_to_xml_in_storage_with_http_info(name, **kwargs) return data - def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): + def get_export_fields_from_pdf_to_xml_in_storage_with_http_info(self, name, **kwargs): """ - Extract document image in JPEG format + Export fields from from PDF in storage to XML file. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_jpeg_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.get_export_fields_from_pdf_to_xml_in_storage_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. :param str storage: The document storage. :param str folder: The document folder. :return: file @@ -7363,7 +7419,7 @@ def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): returns the request thread. """ - all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7374,16 +7430,13 @@ def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_image_extract_as_jpeg" % key + " to method get_export_fields_from_pdf_to_xml_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_jpeg`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_jpeg`") + raise ValueError("Missing the required parameter `name` when calling `get_export_fields_from_pdf_to_xml_in_storage`") collection_formats = {} @@ -7391,14 +7444,8 @@ def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -7419,9 +7466,9 @@ def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/jpeg', 'GET', + return self.api_client.call_api('/pdf/{name}/export/xml', 'GET', path_params, query_params, header_params, @@ -7436,61 +7483,57 @@ def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_image_extract_as_png(self, name, image_id, **kwargs): + def get_field(self, name, field_name, **kwargs): """ - Extract document image in PNG format + Get document field by name. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_png(name, image_id, callback=callback_function) + >>> thread = api.get_field(name, field_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. + :param str field_name: The field name (name should be encoded). (required) :param str storage: The document storage. :param str folder: The document folder. - :return: file + :return: FieldResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_image_extract_as_png_with_http_info(name, image_id, **kwargs) + return self.get_field_with_http_info(name, field_name, **kwargs) else: - (data) = self.get_image_extract_as_png_with_http_info(name, image_id, **kwargs) + (data) = self.get_field_with_http_info(name, field_name, **kwargs) return data - def get_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): + def get_field_with_http_info(self, name, field_name, **kwargs): """ - Extract document image in PNG format + Get document field by name. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_png_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.get_field_with_http_info(name, field_name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. + :param str field_name: The field name (name should be encoded). (required) :param str storage: The document storage. :param str folder: The document folder. - :return: file + :return: FieldResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params = ['name', 'field_name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7501,16 +7544,16 @@ def get_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_image_extract_as_png" % key + " to method get_field" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_png`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_png`") + raise ValueError("Missing the required parameter `name` when calling `get_field`") + # verify the required parameter 'field_name' is set + if ('field_name' not in params) or (params['field_name'] is None): + raise ValueError("Missing the required parameter `field_name` when calling `get_field`") collection_formats = {} @@ -7518,14 +7561,10 @@ def get_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] + if 'field_name' in params: + path_params['fieldName'] = params['field_name'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -7539,23 +7578,23 @@ def get_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/png', 'GET', + return self.api_client.call_api('/pdf/{name}/fields/{fieldName}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type='FieldResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7563,61 +7602,55 @@ def get_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_image_extract_as_tiff(self, name, image_id, **kwargs): + def get_fields(self, name, **kwargs): """ - Extract document image in TIFF format + Get document fields. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_tiff(name, image_id, callback=callback_function) + >>> thread = api.get_fields(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. :param str storage: The document storage. :param str folder: The document folder. - :return: file + :return: FieldsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) + return self.get_fields_with_http_info(name, **kwargs) else: - (data) = self.get_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) + (data) = self.get_fields_with_http_info(name, **kwargs) return data - def get_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): + def get_fields_with_http_info(self, name, **kwargs): """ - Extract document image in TIFF format + Get document fields. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_image_extract_as_tiff_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.get_fields_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) - :param int width: The converted image width. - :param int height: The converted image height. :param str storage: The document storage. :param str folder: The document folder. - :return: file + :return: FieldsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7628,16 +7661,13 @@ def get_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_image_extract_as_tiff" % key + " to method get_fields" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_tiff`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_tiff`") + raise ValueError("Missing the required parameter `name` when calling `get_fields`") collection_formats = {} @@ -7645,14 +7675,8 @@ def get_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -7666,23 +7690,23 @@ def get_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/tiff', 'GET', + return self.api_client.call_api('/pdf/{name}/fields', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type='FieldsResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7690,57 +7714,57 @@ def get_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_images(self, name, page_number, **kwargs): + def get_file_attachment_annotation(self, name, annotation_id, **kwargs): """ - Read document images. + Read document page FileAttachment annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_images(name, page_number, callback=callback_function) + >>> thread = api.get_file_attachment_annotation(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: ImagesResponse + :return: FileAttachmentAnnotationResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_images_with_http_info(name, page_number, **kwargs) + return self.get_file_attachment_annotation_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.get_images_with_http_info(name, page_number, **kwargs) + (data) = self.get_file_attachment_annotation_with_http_info(name, annotation_id, **kwargs) return data - def get_images_with_http_info(self, name, page_number, **kwargs): + def get_file_attachment_annotation_with_http_info(self, name, annotation_id, **kwargs): """ - Read document images. + Read document page FileAttachment annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_images_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.get_file_attachment_annotation_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) + :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: ImagesResponse + :return: FileAttachmentAnnotationResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'storage', 'folder'] + all_params = ['name', 'annotation_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7751,16 +7775,16 @@ def get_images_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_images" % key + " to method get_file_attachment_annotation" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_images`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `get_images`") + raise ValueError("Missing the required parameter `name` when calling `get_file_attachment_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_file_attachment_annotation`") collection_formats = {} @@ -7768,8 +7792,8 @@ def get_images_with_http_info(self, name, page_number, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] query_params = [] if 'storage' in params: @@ -7792,16 +7816,16 @@ def get_images_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/fileattachment/{annotationId}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='ImagesResponse', + response_type='FileAttachmentAnnotationResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7809,16 +7833,16 @@ def get_images_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_ink_annotation(self, name, annotation_id, **kwargs): + def get_file_attachment_annotation_data(self, name, annotation_id, **kwargs): """ - Read document page ink annotation by ID. + Read document page FileAttachment annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_ink_annotation(name, annotation_id, callback=callback_function) + >>> thread = api.get_file_attachment_annotation_data(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) @@ -7826,27 +7850,27 @@ def get_ink_annotation(self, name, annotation_id, **kwargs): :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: InkAnnotationResponse + :return: file If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_ink_annotation_with_http_info(name, annotation_id, **kwargs) + return self.get_file_attachment_annotation_data_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.get_ink_annotation_with_http_info(name, annotation_id, **kwargs) + (data) = self.get_file_attachment_annotation_data_with_http_info(name, annotation_id, **kwargs) return data - def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): + def get_file_attachment_annotation_data_with_http_info(self, name, annotation_id, **kwargs): """ - Read document page ink annotation by ID. + Read document page FileAttachment annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_ink_annotation_with_http_info(name, annotation_id, callback=callback_function) + >>> thread = api.get_file_attachment_annotation_data_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) @@ -7854,7 +7878,7 @@ def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): :param str annotation_id: The annotation ID. (required) :param str storage: The document storage. :param str folder: The document folder. - :return: InkAnnotationResponse + :return: file If the method is called asynchronously, returns the request thread. """ @@ -7870,16 +7894,16 @@ def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_ink_annotation" % key + " to method get_file_attachment_annotation_data" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_ink_annotation`") + raise ValueError("Missing the required parameter `name` when calling `get_file_attachment_annotation_data`") # verify the required parameter 'annotation_id' is set if ('annotation_id' not in params) or (params['annotation_id'] is None): - raise ValueError("Missing the required parameter `annotation_id` when calling `get_ink_annotation`") + raise ValueError("Missing the required parameter `annotation_id` when calling `get_file_attachment_annotation_data`") collection_formats = {} @@ -7901,6 +7925,114 @@ def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): form_params = [] local_var_files = {} + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/annotations/fileattachment/{annotationId}/data', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_file_versions(self, path, **kwargs): + """ + Get file versions + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_file_versions(path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str path: File path e.g. '/file.ext' (required) + :param str storage_name: Storage name + :return: FileVersions + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_file_versions_with_http_info(path, **kwargs) + else: + (data) = self.get_file_versions_with_http_info(path, **kwargs) + return data + + def get_file_versions_with_http_info(self, path, **kwargs): + """ + Get file versions + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_file_versions_with_http_info(path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str path: File path e.g. '/file.ext' (required) + :param str storage_name: Storage name + :return: FileVersions + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['path', 'storage_name'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_file_versions" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `get_file_versions`") + + + collection_formats = {} + + path_params = {} + if 'path' in params: + path_params['path'] = params['path'] + + query_params = [] + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + + header_params = {} + + form_params = [] + local_var_files = {} + body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ @@ -7911,16 +8043,16 @@ def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/annotations/ink/{annotationId}', 'GET', + return self.api_client.call_api('/pdf/storage/version/{path}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='InkAnnotationResponse', + response_type='FileVersions', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7928,55 +8060,53 @@ def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_is_exist(self, path, **kwargs): + def get_files_list(self, path, **kwargs): """ - Check if a specific file or folder exists + Get all files and folders within a folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_is_exist(path, callback=callback_function) + >>> thread = api.get_files_list(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: File or folder path e.g. /file.ext or /Folder1 (required) - :param str version_id: File's version - :param str storage: User's storage name - :return: FileExistResponse + :param str path: Folder path e.g. '/folder' (required) + :param str storage_name: Storage name + :return: FilesList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_is_exist_with_http_info(path, **kwargs) + return self.get_files_list_with_http_info(path, **kwargs) else: - (data) = self.get_is_exist_with_http_info(path, **kwargs) + (data) = self.get_files_list_with_http_info(path, **kwargs) return data - def get_is_exist_with_http_info(self, path, **kwargs): + def get_files_list_with_http_info(self, path, **kwargs): """ - Check if a specific file or folder exists + Get all files and folders within a folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_is_exist_with_http_info(path, callback=callback_function) + >>> thread = api.get_files_list_with_http_info(path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: File or folder path e.g. /file.ext or /Folder1 (required) - :param str version_id: File's version - :param str storage: User's storage name - :return: FileExistResponse + :param str path: Folder path e.g. '/folder' (required) + :param str storage_name: Storage name + :return: FilesList If the method is called asynchronously, returns the request thread. """ - all_params = ['path', 'version_id', 'storage'] + all_params = ['path', 'storage_name'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7987,26 +8117,1148 @@ def get_is_exist_with_http_info(self, path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_is_exist" % key + " to method get_files_list" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'path' is set if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `get_is_exist`") + raise ValueError("Missing the required parameter `path` when calling `get_files_list`") collection_formats = {} path_params = {} + if 'path' in params: + path_params['path'] = params['path'] + + query_params = [] + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/storage/folder/{path}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FilesList', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_free_text_annotation(self, name, annotation_id, **kwargs): + """ + Read document page free text annotation by ID. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_free_text_annotation(name, annotation_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: FreeTextAnnotationResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_free_text_annotation_with_http_info(name, annotation_id, **kwargs) + else: + (data) = self.get_free_text_annotation_with_http_info(name, annotation_id, **kwargs) + return data + + def get_free_text_annotation_with_http_info(self, name, annotation_id, **kwargs): + """ + Read document page free text annotation by ID. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_free_text_annotation_with_http_info(name, annotation_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: FreeTextAnnotationResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_free_text_annotation" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_free_text_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_free_text_annotation`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] + + query_params = [] + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/annotations/freetext/{annotationId}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FreeTextAnnotationResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_highlight_annotation(self, name, annotation_id, **kwargs): + """ + Read document page highlight annotation by ID. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_highlight_annotation(name, annotation_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: HighlightAnnotationResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_highlight_annotation_with_http_info(name, annotation_id, **kwargs) + else: + (data) = self.get_highlight_annotation_with_http_info(name, annotation_id, **kwargs) + return data + + def get_highlight_annotation_with_http_info(self, name, annotation_id, **kwargs): + """ + Read document page highlight annotation by ID. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_highlight_annotation_with_http_info(name, annotation_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: HighlightAnnotationResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'annotation_id', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_highlight_annotation" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_highlight_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_highlight_annotation`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] + + query_params = [] + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/annotations/highlight/{annotationId}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='HighlightAnnotationResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_html_in_storage_to_pdf(self, src_path, **kwargs): + """ + Convert HTML file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_html_in_storage_to_pdf(src_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Full source filename (ex. /folder1/folder2/template.zip) (required) + :param str html_file_name: Name of HTML file in ZIP. + :param float height: Page height + :param float width: Page width + :param bool is_landscape: Is page landscaped + :param float margin_left: Page margin left + :param float margin_bottom: Page margin bottom + :param float margin_right: Page margin right + :param float margin_top: Page margin top + :param str storage: The document storage. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_html_in_storage_to_pdf_with_http_info(src_path, **kwargs) + else: + (data) = self.get_html_in_storage_to_pdf_with_http_info(src_path, **kwargs) + return data + + def get_html_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): + """ + Convert HTML file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_html_in_storage_to_pdf_with_http_info(src_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Full source filename (ex. /folder1/folder2/template.zip) (required) + :param str html_file_name: Name of HTML file in ZIP. + :param float height: Page height + :param float width: Page width + :param bool is_landscape: Is page landscaped + :param float margin_left: Page margin left + :param float margin_bottom: Page margin bottom + :param float margin_right: Page margin right + :param float margin_top: Page margin top + :param str storage: The document storage. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['src_path', 'html_file_name', 'height', 'width', 'is_landscape', 'margin_left', 'margin_bottom', 'margin_right', 'margin_top', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_html_in_storage_to_pdf" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'src_path' is set + if ('src_path' not in params) or (params['src_path'] is None): + raise ValueError("Missing the required parameter `src_path` when calling `get_html_in_storage_to_pdf`") + + + collection_formats = {} + + path_params = {} + + query_params = [] + if 'src_path' in params: + query_params.append(('srcPath', params['src_path'])) + if 'html_file_name' in params: + query_params.append(('htmlFileName', params['html_file_name'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'width' in params: + query_params.append(('width', params['width'])) + if 'is_landscape' in params: + query_params.append(('isLandscape', params['is_landscape'])) + if 'margin_left' in params: + query_params.append(('marginLeft', params['margin_left'])) + if 'margin_bottom' in params: + query_params.append(('marginBottom', params['margin_bottom'])) + if 'margin_right' in params: + query_params.append(('marginRight', params['margin_right'])) + if 'margin_top' in params: + query_params.append(('marginTop', params['margin_top'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/create/html', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_image(self, name, image_id, **kwargs): + """ + Read document image by ID. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: ImageResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_image_with_http_info(name, image_id, **kwargs) + else: + (data) = self.get_image_with_http_info(name, image_id, **kwargs) + return data + + def get_image_with_http_info(self, name, image_id, **kwargs): + """ + Read document image by ID. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: ImageResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_image" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_image`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `get_image`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='ImageResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_image_extract_as_gif(self, name, image_id, **kwargs): + """ + Extract document image in GIF format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_gif(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_image_extract_as_gif_with_http_info(name, image_id, **kwargs) + else: + (data) = self.get_image_extract_as_gif_with_http_info(name, image_id, **kwargs) + return data + + def get_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): + """ + Extract document image in GIF format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_gif_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_image_extract_as_gif" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_gif`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_gif`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/gif', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_image_extract_as_jpeg(self, name, image_id, **kwargs): + """ + Extract document image in JPEG format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_jpeg(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + else: + (data) = self.get_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + return data + + def get_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): + """ + Extract document image in JPEG format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_jpeg_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_image_extract_as_jpeg" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_jpeg`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_jpeg`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/jpeg', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_image_extract_as_png(self, name, image_id, **kwargs): + """ + Extract document image in PNG format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_png(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_image_extract_as_png_with_http_info(name, image_id, **kwargs) + else: + (data) = self.get_image_extract_as_png_with_http_info(name, image_id, **kwargs) + return data + + def get_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): + """ + Extract document image in PNG format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_png_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_image_extract_as_png" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_png`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_png`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/png', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_image_extract_as_tiff(self, name, image_id, **kwargs): + """ + Extract document image in TIFF format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_tiff(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) + else: + (data) = self.get_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) + return data + + def get_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): + """ + Extract document image in TIFF format + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_image_extract_as_tiff_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_image_extract_as_tiff" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_image_extract_as_tiff`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `get_image_extract_as_tiff`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/tiff', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_images(self, name, page_number, **kwargs): + """ + Read document images. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_images(name, page_number, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: ImagesResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_images_with_http_info(name, page_number, **kwargs) + else: + (data) = self.get_images_with_http_info(name, page_number, **kwargs) + return data + + def get_images_with_http_info(self, name, page_number, **kwargs): + """ + Read document images. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_images_with_http_info(name, page_number, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: ImagesResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'page_number', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_images" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_images`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `get_images`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) - if 'version_id' in params: - query_params.append(('versionId', params['version_id'])) if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -8023,16 +9275,373 @@ def get_is_exist_with_http_info(self, path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='ImagesResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_import_fields_from_fdf_in_storage(self, name, fdf_file_path, **kwargs): + """ + Update fields from FDF file in storage. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_import_fields_from_fdf_in_storage(name, fdf_file_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str fdf_file_path: The Fdf file path. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_import_fields_from_fdf_in_storage_with_http_info(name, fdf_file_path, **kwargs) + else: + (data) = self.get_import_fields_from_fdf_in_storage_with_http_info(name, fdf_file_path, **kwargs) + return data + + def get_import_fields_from_fdf_in_storage_with_http_info(self, name, fdf_file_path, **kwargs): + """ + Update fields from FDF file in storage. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_import_fields_from_fdf_in_storage_with_http_info(name, fdf_file_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str fdf_file_path: The Fdf file path. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'fdf_file_path', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_import_fields_from_fdf_in_storage" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_import_fields_from_fdf_in_storage`") + # verify the required parameter 'fdf_file_path' is set + if ('fdf_file_path' not in params) or (params['fdf_file_path'] is None): + raise ValueError("Missing the required parameter `fdf_file_path` when calling `get_import_fields_from_fdf_in_storage`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'fdf_file_path' in params: + query_params.append(('fdfFilePath', params['fdf_file_path'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/import/fdf', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_import_fields_from_xfdf_in_storage(self, name, xfdf_file_path, **kwargs): + """ + Update fields from XFDF file in storage. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_import_fields_from_xfdf_in_storage(name, xfdf_file_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str xfdf_file_path: The XFDF file path. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_import_fields_from_xfdf_in_storage_with_http_info(name, xfdf_file_path, **kwargs) + else: + (data) = self.get_import_fields_from_xfdf_in_storage_with_http_info(name, xfdf_file_path, **kwargs) + return data + + def get_import_fields_from_xfdf_in_storage_with_http_info(self, name, xfdf_file_path, **kwargs): + """ + Update fields from XFDF file in storage. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_import_fields_from_xfdf_in_storage_with_http_info(name, xfdf_file_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str xfdf_file_path: The XFDF file path. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'xfdf_file_path', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_import_fields_from_xfdf_in_storage" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_import_fields_from_xfdf_in_storage`") + # verify the required parameter 'xfdf_file_path' is set + if ('xfdf_file_path' not in params) or (params['xfdf_file_path'] is None): + raise ValueError("Missing the required parameter `xfdf_file_path` when calling `get_import_fields_from_xfdf_in_storage`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'xfdf_file_path' in params: + query_params.append(('xfdfFilePath', params['xfdf_file_path'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/import/xfdf', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_import_fields_from_xml_in_storage(self, name, xml_file_path, **kwargs): + """ + Import from XML file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_import_fields_from_xml_in_storage(name, xml_file_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str xml_file_path: Full source filename (ex. /folder1/folder2/template.xml) (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_import_fields_from_xml_in_storage_with_http_info(name, xml_file_path, **kwargs) + else: + (data) = self.get_import_fields_from_xml_in_storage_with_http_info(name, xml_file_path, **kwargs) + return data + + def get_import_fields_from_xml_in_storage_with_http_info(self, name, xml_file_path, **kwargs): + """ + Import from XML file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_import_fields_from_xml_in_storage_with_http_info(name, xml_file_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str xml_file_path: Full source filename (ex. /folder1/folder2/template.xml) (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'xml_file_path', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_import_fields_from_xml_in_storage" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `get_import_fields_from_xml_in_storage`") + # verify the required parameter 'xml_file_path' is set + if ('xml_file_path' not in params) or (params['xml_file_path'] is None): + raise ValueError("Missing the required parameter `xml_file_path` when calling `get_import_fields_from_xml_in_storage`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'xml_file_path' in params: + query_params.append(('xmlFilePath', params['xml_file_path'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/exist', 'GET', + return self.api_client.call_api('/pdf/{name}/import/xml', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FileExistResponse', + response_type='file', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8040,51 +9649,57 @@ def get_is_exist_with_http_info(self, path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_is_storage_exist(self, name, **kwargs): + def get_ink_annotation(self, name, annotation_id, **kwargs): """ - Check if storage exists + Read document page ink annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_is_storage_exist(name, callback=callback_function) + >>> thread = api.get_ink_annotation(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: Storage name (required) - :return: StorageExistResponse + :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: InkAnnotationResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_is_storage_exist_with_http_info(name, **kwargs) + return self.get_ink_annotation_with_http_info(name, annotation_id, **kwargs) else: - (data) = self.get_is_storage_exist_with_http_info(name, **kwargs) + (data) = self.get_ink_annotation_with_http_info(name, annotation_id, **kwargs) return data - def get_is_storage_exist_with_http_info(self, name, **kwargs): + def get_ink_annotation_with_http_info(self, name, annotation_id, **kwargs): """ - Check if storage exists + Read document page ink annotation by ID. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_is_storage_exist_with_http_info(name, callback=callback_function) + >>> thread = api.get_ink_annotation_with_http_info(name, annotation_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: Storage name (required) - :return: StorageExistResponse + :param str name: The document name. (required) + :param str annotation_id: The annotation ID. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :return: InkAnnotationResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name'] + all_params = ['name', 'annotation_id', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8095,13 +9710,16 @@ def get_is_storage_exist_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_is_storage_exist" % key + " to method get_ink_annotation" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `get_is_storage_exist`") + raise ValueError("Missing the required parameter `name` when calling `get_ink_annotation`") + # verify the required parameter 'annotation_id' is set + if ('annotation_id' not in params) or (params['annotation_id'] is None): + raise ValueError("Missing the required parameter `annotation_id` when calling `get_ink_annotation`") collection_formats = {} @@ -8109,8 +9727,14 @@ def get_is_storage_exist_with_http_info(self, name, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'annotation_id' in params: + path_params['annotationId'] = params['annotation_id'] query_params = [] + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -8127,16 +9751,16 @@ def get_is_storage_exist_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/{name}/exist', 'GET', + return self.api_client.call_api('/pdf/{name}/annotations/ink/{annotationId}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='StorageExistResponse', + response_type='InkAnnotationResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8235,7 +9859,7 @@ def get_la_te_x_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/latex', 'GET', path_params, @@ -8354,7 +9978,7 @@ def get_line_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/line/{annotationId}', 'GET', path_params, @@ -8473,7 +10097,7 @@ def get_link_annotation_with_http_info(self, name, link_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/links/{linkId}', 'GET', path_params, @@ -8490,219 +10114,6 @@ def get_link_annotation_with_http_info(self, name, link_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_list_file_versions(self, path, **kwargs): - """ - Get the file's versions list - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please define a `callback` function - to be invoked when receiving the response. - >>> def callback_function(response): - >>> pprint(response) - >>> - >>> thread = api.get_list_file_versions(path, callback=callback_function) - - :param callback function: The callback function - for asynchronous request. (optional) - :param str path: File path e.g. /file.ext or /Folder1/file.ext (required) - :param str storage: User's storage name - :return: FileVersionsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('callback'): - return self.get_list_file_versions_with_http_info(path, **kwargs) - else: - (data) = self.get_list_file_versions_with_http_info(path, **kwargs) - return data - - def get_list_file_versions_with_http_info(self, path, **kwargs): - """ - Get the file's versions list - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please define a `callback` function - to be invoked when receiving the response. - >>> def callback_function(response): - >>> pprint(response) - >>> - >>> thread = api.get_list_file_versions_with_http_info(path, callback=callback_function) - - :param callback function: The callback function - for asynchronous request. (optional) - :param str path: File path e.g. /file.ext or /Folder1/file.ext (required) - :param str storage: User's storage name - :return: FileVersionsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['path', 'storage'] - all_params.append('callback') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_list_file_versions" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'path' is set - if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `get_list_file_versions`") - - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) - if 'storage' in params: - query_params.append(('storage', params['storage'])) - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.\ - select_header_accept(['application/json']) - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['application/json']) - - # Authentication setting - auth_settings = [] - - return self.api_client.call_api('/storage/version', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='FileVersionsResponse', - auth_settings=auth_settings, - callback=params.get('callback'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_list_files(self, **kwargs): - """ - Get the file listing of a specific folder - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please define a `callback` function - to be invoked when receiving the response. - >>> def callback_function(response): - >>> pprint(response) - >>> - >>> thread = api.get_list_files(callback=callback_function) - - :param callback function: The callback function - for asynchronous request. (optional) - :param str path: Start with name of storage e.g. root folder '/'or some folder '/folder1/..' - :param str storage: User's storage name - :return: FilesResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('callback'): - return self.get_list_files_with_http_info(**kwargs) - else: - (data) = self.get_list_files_with_http_info(**kwargs) - return data - - def get_list_files_with_http_info(self, **kwargs): - """ - Get the file listing of a specific folder - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please define a `callback` function - to be invoked when receiving the response. - >>> def callback_function(response): - >>> pprint(response) - >>> - >>> thread = api.get_list_files_with_http_info(callback=callback_function) - - :param callback function: The callback function - for asynchronous request. (optional) - :param str path: Start with name of storage e.g. root folder '/'or some folder '/folder1/..' - :param str storage: User's storage name - :return: FilesResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['path', 'storage'] - all_params.append('callback') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_list_files" % key - ) - params[key] = val - del params['kwargs'] - - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) - if 'storage' in params: - query_params.append(('storage', params['storage'])) - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.\ - select_header_accept(['application/json']) - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['application/json']) - - # Authentication setting - auth_settings = [] - - return self.api_client.call_api('/storage/folder', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='FilesResponse', - auth_settings=auth_settings, - callback=params.get('callback'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - def get_mht_in_storage_to_pdf(self, src_path, **kwargs): """ Convert MHT file (located on storage) to PDF format and return resulting file in response. @@ -8794,7 +10205,7 @@ def get_mht_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/mht', 'GET', path_params, @@ -8913,7 +10324,7 @@ def get_movie_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/movie/{annotationId}', 'GET', path_params, @@ -9025,14 +10436,14 @@ def get_page_with_http_info(self, name, page_number, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}', 'GET', path_params, @@ -9151,7 +10562,7 @@ def get_page_annotations_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations', 'GET', path_params, @@ -9270,7 +10681,7 @@ def get_page_caret_annotations_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/caret', 'GET', path_params, @@ -9389,7 +10800,7 @@ def get_page_circle_annotations_with_http_info(self, name, page_number, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/circle', 'GET', path_params, @@ -9516,7 +10927,7 @@ def get_page_convert_to_bmp_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/bmp', 'GET', path_params, @@ -9643,7 +11054,7 @@ def get_page_convert_to_emf_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/emf', 'GET', path_params, @@ -9770,7 +11181,7 @@ def get_page_convert_to_gif_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/gif', 'GET', path_params, @@ -9897,7 +11308,7 @@ def get_page_convert_to_jpeg_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/jpeg', 'GET', path_params, @@ -10024,7 +11435,7 @@ def get_page_convert_to_png_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/png', 'GET', path_params, @@ -10151,7 +11562,7 @@ def get_page_convert_to_tiff_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/tiff', 'GET', path_params, @@ -10270,7 +11681,7 @@ def get_page_file_attachment_annotations_with_http_info(self, name, page_number, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/fileattachment', 'GET', path_params, @@ -10389,7 +11800,7 @@ def get_page_free_text_annotations_with_http_info(self, name, page_number, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/freetext', 'GET', path_params, @@ -10508,7 +11919,7 @@ def get_page_highlight_annotations_with_http_info(self, name, page_number, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/highlight', 'GET', path_params, @@ -10627,7 +12038,7 @@ def get_page_ink_annotations_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/ink', 'GET', path_params, @@ -10746,7 +12157,7 @@ def get_page_line_annotations_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/line', 'GET', path_params, @@ -10872,7 +12283,7 @@ def get_page_link_annotation_with_http_info(self, name, page_number, link_id, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/links/{linkId}', 'GET', path_params, @@ -10991,7 +12402,7 @@ def get_page_link_annotations_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/links', 'GET', path_params, @@ -11110,7 +12521,7 @@ def get_page_movie_annotations_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/movie', 'GET', path_params, @@ -11229,7 +12640,7 @@ def get_page_poly_line_annotations_with_http_info(self, name, page_number, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/polyline', 'GET', path_params, @@ -11348,7 +12759,7 @@ def get_page_polygon_annotations_with_http_info(self, name, page_number, **kwarg select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/polygon', 'GET', path_params, @@ -11467,7 +12878,7 @@ def get_page_popup_annotations_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/popup', 'GET', path_params, @@ -11586,7 +12997,7 @@ def get_page_redaction_annotations_with_http_info(self, name, page_number, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/redaction', 'GET', path_params, @@ -11705,7 +13116,7 @@ def get_page_screen_annotations_with_http_info(self, name, page_number, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/screen', 'GET', path_params, @@ -11824,7 +13235,7 @@ def get_page_sound_annotations_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/sound', 'GET', path_params, @@ -11943,7 +13354,7 @@ def get_page_square_annotations_with_http_info(self, name, page_number, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/square', 'GET', path_params, @@ -12062,7 +13473,7 @@ def get_page_squiggly_annotations_with_http_info(self, name, page_number, **kwar select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/squiggly', 'GET', path_params, @@ -12181,7 +13592,7 @@ def get_page_stamp_annotations_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/stamp', 'GET', path_params, @@ -12300,7 +13711,7 @@ def get_page_stamps_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamps', 'GET', path_params, @@ -12419,7 +13830,7 @@ def get_page_strike_out_annotations_with_http_info(self, name, page_number, **kw select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/strikeout', 'GET', path_params, @@ -12538,7 +13949,7 @@ def get_page_tables_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/tables', 'GET', path_params, @@ -12665,7 +14076,7 @@ def get_page_text_with_http_info(self, name, page_number, llx, lly, urx, ury, ** query_params = [] if 'format' in params: query_params.append(('format', params['format'])) - collection_formats['format'] = 'multi' + collection_formats['format'] = 'csv' if 'regex' in params: query_params.append(('regex', params['regex'])) if 'split_rects' in params: @@ -12698,7 +14109,7 @@ def get_page_text_with_http_info(self, name, page_number, llx, lly, urx, ury, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/text', 'GET', path_params, @@ -12817,7 +14228,7 @@ def get_page_text_annotations_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/text', 'GET', path_params, @@ -12936,7 +14347,7 @@ def get_page_underline_annotations_with_http_info(self, name, page_number, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/underline', 'GET', path_params, @@ -13048,7 +14459,7 @@ def get_pages_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages', 'GET', path_params, @@ -13156,7 +14567,7 @@ def get_pcl_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/pcl', 'GET', path_params, @@ -13300,7 +14711,7 @@ def get_pdf_in_storage_to_doc_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/doc', 'GET', path_params, @@ -13416,7 +14827,7 @@ def get_pdf_in_storage_to_epub_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/epub', 'GET', path_params, @@ -13594,7 +15005,7 @@ def get_pdf_in_storage_to_html_with_http_info(self, name, **kwargs): query_params.append(('cssClassNamesPrefix', params['css_class_names_prefix'])) if 'explicit_list_of_saved_pages' in params: query_params.append(('explicitListOfSavedPages', params['explicit_list_of_saved_pages'])) - collection_formats['explicitListOfSavedPages'] = 'multi' + collection_formats['explicitListOfSavedPages'] = 'csv' if 'font_encoding_strategy' in params: query_params.append(('fontEncodingStrategy', params['font_encoding_strategy'])) if 'font_saving_mode' in params: @@ -13641,7 +15052,7 @@ def get_pdf_in_storage_to_html_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/html', 'GET', path_params, @@ -13757,7 +15168,7 @@ def get_pdf_in_storage_to_la_te_x_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/latex', 'GET', path_params, @@ -13869,7 +15280,7 @@ def get_pdf_in_storage_to_mobi_xml_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/mobixml', 'GET', path_params, @@ -13988,7 +15399,7 @@ def get_pdf_in_storage_to_pdf_a_with_http_info(self, name, type, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/pdfa', 'GET', path_params, @@ -14108,7 +15519,7 @@ def get_pdf_in_storage_to_pptx_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/pptx', 'GET', path_params, @@ -14224,7 +15635,7 @@ def get_pdf_in_storage_to_svg_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/svg', 'GET', path_params, @@ -14396,7 +15807,7 @@ def get_pdf_in_storage_to_tiff_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/tiff', 'GET', path_params, @@ -14524,7 +15935,7 @@ def get_pdf_in_storage_to_xls_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xls', 'GET', path_params, @@ -14652,7 +16063,7 @@ def get_pdf_in_storage_to_xlsx_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xlsx', 'GET', path_params, @@ -14764,7 +16175,7 @@ def get_pdf_in_storage_to_xml_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xml', 'GET', path_params, @@ -14876,7 +16287,7 @@ def get_pdf_in_storage_to_xps_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xps', 'GET', path_params, @@ -14995,7 +16406,7 @@ def get_poly_line_annotation_with_http_info(self, name, annotation_id, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/polyline/{annotationId}', 'GET', path_params, @@ -15114,7 +16525,7 @@ def get_polygon_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/polygon/{annotationId}', 'GET', path_params, @@ -15233,7 +16644,7 @@ def get_popup_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/popup/{annotationId}', 'GET', path_params, @@ -15341,7 +16752,7 @@ def get_ps_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/ps', 'GET', path_params, @@ -15460,7 +16871,7 @@ def get_redaction_annotation_with_http_info(self, name, annotation_id, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/redaction/{annotationId}', 'GET', path_params, @@ -15572,14 +16983,14 @@ def get_screen_annotation_with_http_info(self, name, annotation_id, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/screen/{annotationId}', 'GET', path_params, @@ -15698,7 +17109,7 @@ def get_screen_annotation_data_with_http_info(self, name, annotation_id, **kwarg select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/screen/{annotationId}/data', 'GET', path_params, @@ -15810,14 +17221,14 @@ def get_sound_annotation_with_http_info(self, name, annotation_id, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/sound/{annotationId}', 'GET', path_params, @@ -15936,7 +17347,7 @@ def get_sound_annotation_data_with_http_info(self, name, annotation_id, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/sound/{annotationId}/data', 'GET', path_params, @@ -16055,7 +17466,7 @@ def get_square_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/square/{annotationId}', 'GET', path_params, @@ -16174,7 +17585,7 @@ def get_squiggly_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/squiggly/{annotationId}', 'GET', path_params, @@ -16293,7 +17704,7 @@ def get_stamp_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/stamp/{annotationId}', 'GET', path_params, @@ -16412,7 +17823,7 @@ def get_stamp_annotation_data_with_http_info(self, name, annotation_id, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/stamp/{annotationId}/data', 'GET', path_params, @@ -16531,7 +17942,7 @@ def get_strike_out_annotation_with_http_info(self, name, annotation_id, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/strikeout/{annotationId}', 'GET', path_params, @@ -16671,7 +18082,7 @@ def get_svg_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/svg', 'GET', path_params, @@ -16790,7 +18201,7 @@ def get_table_with_http_info(self, name, table_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/tables/{tableId}', 'GET', path_params, @@ -16910,7 +18321,7 @@ def get_text_with_http_info(self, name, llx, lly, urx, ury, **kwargs): query_params = [] if 'format' in params: query_params.append(('format', params['format'])) - collection_formats['format'] = 'multi' + collection_formats['format'] = 'csv' if 'regex' in params: query_params.append(('regex', params['regex'])) if 'split_rects' in params: @@ -16943,7 +18354,7 @@ def get_text_with_http_info(self, name, llx, lly, urx, ury, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/text', 'GET', path_params, @@ -17062,7 +18473,7 @@ def get_text_annotation_with_http_info(self, name, annotation_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/text/{annotationId}', 'GET', path_params, @@ -17181,7 +18592,7 @@ def get_underline_annotation_with_http_info(self, name, annotation_id, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/underline/{annotationId}', 'GET', path_params, @@ -17300,7 +18711,7 @@ def get_verify_signature_with_http_info(self, name, sign_name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/verifySignature', 'GET', path_params, @@ -17436,7 +18847,7 @@ def get_web_in_storage_to_pdf_with_http_info(self, url, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/web', 'GET', path_params, @@ -17548,7 +18959,7 @@ def get_words_per_page_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/wordCount', 'GET', path_params, @@ -17660,7 +19071,7 @@ def get_xfa_pdf_in_storage_to_acro_form_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xfatoacroform', 'GET', path_params, @@ -17772,7 +19183,7 @@ def get_xml_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/create/xml', 'GET', path_params, @@ -17880,9 +19291,117 @@ def get_xps_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/create/xps', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='file', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_xsl_fo_in_storage_to_pdf(self, src_path, **kwargs): + """ + Convert XslFo file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_xsl_fo_in_storage_to_pdf(src_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Full source filename (ex. /folder1/folder2/template.xslfo) (required) + :param str storage: The document storage. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.get_xsl_fo_in_storage_to_pdf_with_http_info(src_path, **kwargs) + else: + (data) = self.get_xsl_fo_in_storage_to_pdf_with_http_info(src_path, **kwargs) + return data + + def get_xsl_fo_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): + """ + Convert XslFo file (located on storage) to PDF format and return resulting file in response. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_xsl_fo_in_storage_to_pdf_with_http_info(src_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Full source filename (ex. /folder1/folder2/template.xslfo) (required) + :param str storage: The document storage. + :return: file + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['src_path', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_xsl_fo_in_storage_to_pdf" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'src_path' is set + if ('src_path' not in params) or (params['src_path'] is None): + raise ValueError("Missing the required parameter `src_path` when calling `get_xsl_fo_in_storage_to_pdf`") + + + collection_formats = {} + + path_params = {} + + query_params = [] + if 'src_path' in params: + query_params.append(('srcPath', params['src_path'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['multipart/form-data']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/create/xps', 'GET', + return self.api_client.call_api('/pdf/create/xslfo', 'GET', path_params, query_params, header_params, @@ -17897,53 +19416,59 @@ def get_xps_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_xsl_fo_in_storage_to_pdf(self, src_path, **kwargs): + def move_file(self, src_path, dest_path, **kwargs): """ - Convert XslFo file (located on storage) to PDF format and return resulting file in response. + Move file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_xsl_fo_in_storage_to_pdf(src_path, callback=callback_function) + >>> thread = api.move_file(src_path, dest_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src_path: Full source filename (ex. /folder1/folder2/template.xslfo) (required) - :param str storage: The document storage. - :return: file + :param str src_path: Source file path e.g. '/src.ext' (required) + :param str dest_path: Destination file path e.g. '/dest.ext' (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :param str version_id: File version ID to move + :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.get_xsl_fo_in_storage_to_pdf_with_http_info(src_path, **kwargs) + return self.move_file_with_http_info(src_path, dest_path, **kwargs) else: - (data) = self.get_xsl_fo_in_storage_to_pdf_with_http_info(src_path, **kwargs) + (data) = self.move_file_with_http_info(src_path, dest_path, **kwargs) return data - def get_xsl_fo_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): + def move_file_with_http_info(self, src_path, dest_path, **kwargs): """ - Convert XslFo file (located on storage) to PDF format and return resulting file in response. + Move file This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.get_xsl_fo_in_storage_to_pdf_with_http_info(src_path, callback=callback_function) + >>> thread = api.move_file_with_http_info(src_path, dest_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src_path: Full source filename (ex. /folder1/folder2/template.xslfo) (required) - :param str storage: The document storage. - :return: file + :param str src_path: Source file path e.g. '/src.ext' (required) + :param str dest_path: Destination file path e.g. '/dest.ext' (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :param str version_id: File version ID to move + :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['src_path', 'storage'] + all_params = ['src_path', 'dest_path', 'src_storage_name', 'dest_storage_name', 'version_id'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -17954,24 +19479,152 @@ def get_xsl_fo_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_xsl_fo_in_storage_to_pdf" % key + " to method move_file" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'src_path' is set if ('src_path' not in params) or (params['src_path'] is None): - raise ValueError("Missing the required parameter `src_path` when calling `get_xsl_fo_in_storage_to_pdf`") + raise ValueError("Missing the required parameter `src_path` when calling `move_file`") + # verify the required parameter 'dest_path' is set + if ('dest_path' not in params) or (params['dest_path'] is None): + raise ValueError("Missing the required parameter `dest_path` when calling `move_file`") collection_formats = {} path_params = {} + if 'src_path' in params: + path_params['srcPath'] = params['src_path'] query_params = [] + if 'dest_path' in params: + query_params.append(('destPath', params['dest_path'])) + if 'src_storage_name' in params: + query_params.append(('srcStorageName', params['src_storage_name'])) + if 'dest_storage_name' in params: + query_params.append(('destStorageName', params['dest_storage_name'])) + if 'version_id' in params: + query_params.append(('versionId', params['version_id'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/storage/file/move/{srcPath}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def move_folder(self, src_path, dest_path, **kwargs): + """ + Move folder + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.move_folder(src_path, dest_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Folder path to move e.g. '/folder' (required) + :param str dest_path: Destination folder path to move to e.g '/dst' (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.move_folder_with_http_info(src_path, dest_path, **kwargs) + else: + (data) = self.move_folder_with_http_info(src_path, dest_path, **kwargs) + return data + + def move_folder_with_http_info(self, src_path, dest_path, **kwargs): + """ + Move folder + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.move_folder_with_http_info(src_path, dest_path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str src_path: Folder path to move e.g. '/folder' (required) + :param str dest_path: Destination folder path to move to e.g '/dst' (required) + :param str src_storage_name: Source storage name + :param str dest_storage_name: Destination storage name + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['src_path', 'dest_path', 'src_storage_name', 'dest_storage_name'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method move_folder" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'src_path' is set + if ('src_path' not in params) or (params['src_path'] is None): + raise ValueError("Missing the required parameter `src_path` when calling `move_folder`") + # verify the required parameter 'dest_path' is set + if ('dest_path' not in params) or (params['dest_path'] is None): + raise ValueError("Missing the required parameter `dest_path` when calling `move_folder`") + + + collection_formats = {} + + path_params = {} if 'src_path' in params: - query_params.append(('srcPath', params['src_path'])) - if 'storage' in params: - query_params.append(('storage', params['storage'])) + path_params['srcPath'] = params['src_path'] + + query_params = [] + if 'dest_path' in params: + query_params.append(('destPath', params['dest_path'])) + if 'src_storage_name' in params: + query_params.append(('srcStorageName', params['src_storage_name'])) + if 'dest_storage_name' in params: + query_params.append(('destStorageName', params['dest_storage_name'])) header_params = {} @@ -17981,23 +19634,23 @@ def get_xsl_fo_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.\ - select_header_accept(['multipart/form-data']) + select_header_accept(['application/json']) # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/create/xslfo', 'GET', + return self.api_client.call_api('/pdf/storage/folder/move/{srcPath}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='file', + response_type=None, auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -18005,7 +19658,119 @@ def get_xsl_fo_in_storage_to_pdf_with_http_info(self, src_path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_append_document(self, name, **kwargs): + def object_exists(self, path, **kwargs): + """ + Check if file or folder exists + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.object_exists(path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str path: File or folder path e.g. '/file.ext' or '/folder' (required) + :param str storage_name: Storage name + :param str version_id: File version ID + :return: ObjectExist + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.object_exists_with_http_info(path, **kwargs) + else: + (data) = self.object_exists_with_http_info(path, **kwargs) + return data + + def object_exists_with_http_info(self, path, **kwargs): + """ + Check if file or folder exists + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.object_exists_with_http_info(path, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str path: File or folder path e.g. '/file.ext' or '/folder' (required) + :param str storage_name: Storage name + :param str version_id: File version ID + :return: ObjectExist + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['path', 'storage_name', 'version_id'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method object_exists" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `object_exists`") + + + collection_formats = {} + + path_params = {} + if 'path' in params: + path_params['path'] = params['path'] + + query_params = [] + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + if 'version_id' in params: + query_params.append(('versionId', params['version_id'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/storage/exist/{path}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='ObjectExist', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def post_append_document(self, name, append_file, **kwargs): """ Append document to existing one. This method makes a synchronous HTTP request by default. To make an @@ -18014,13 +19779,12 @@ def post_append_document(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_append_document(name, callback=callback_function) + >>> thread = api.post_append_document(name, append_file, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The original document name. (required) - :param AppendDocument append_document: with the append document data. - :param str append_file: Append file server path. + :param str append_file: Append file server path. (required) :param int start_page: Appending start page. :param int end_page: Appending end page. :param str storage: The documents storage. @@ -18031,12 +19795,12 @@ def post_append_document(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_append_document_with_http_info(name, **kwargs) + return self.post_append_document_with_http_info(name, append_file, **kwargs) else: - (data) = self.post_append_document_with_http_info(name, **kwargs) + (data) = self.post_append_document_with_http_info(name, append_file, **kwargs) return data - def post_append_document_with_http_info(self, name, **kwargs): + def post_append_document_with_http_info(self, name, append_file, **kwargs): """ Append document to existing one. This method makes a synchronous HTTP request by default. To make an @@ -18045,13 +19809,12 @@ def post_append_document_with_http_info(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_append_document_with_http_info(name, callback=callback_function) + >>> thread = api.post_append_document_with_http_info(name, append_file, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The original document name. (required) - :param AppendDocument append_document: with the append document data. - :param str append_file: Append file server path. + :param str append_file: Append file server path. (required) :param int start_page: Appending start page. :param int end_page: Appending end page. :param str storage: The documents storage. @@ -18061,7 +19824,7 @@ def post_append_document_with_http_info(self, name, **kwargs): returns the request thread. """ - all_params = ['name', 'append_document', 'append_file', 'start_page', 'end_page', 'storage', 'folder'] + all_params = ['name', 'append_file', 'start_page', 'end_page', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -18079,6 +19842,9 @@ def post_append_document_with_http_info(self, name, **kwargs): # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): raise ValueError("Missing the required parameter `name` when calling `post_append_document`") + # verify the required parameter 'append_file' is set + if ('append_file' not in params) or (params['append_file'] is None): + raise ValueError("Missing the required parameter `append_file` when calling `post_append_document`") collection_formats = {} @@ -18105,8 +19871,6 @@ def post_append_document_with_http_info(self, name, **kwargs): local_var_files = {} body_params = None - if 'append_document' in params: - body_params = params['append_document'] # HTTP header `Accept` header_params['Accept'] = self.api_client.\ select_header_accept(['application/json']) @@ -18116,7 +19880,7 @@ def post_append_document_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/appendDocument', 'POST', path_params, @@ -18133,6 +19897,132 @@ def post_append_document_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + def post_bookmark(self, name, bookmark_path, bookmarks, **kwargs): + """ + Add document bookmarks. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.post_bookmark(name, bookmark_path, bookmarks, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str bookmark_path: The bookmark path. (required) + :param list[Bookmark] bookmarks: The array of bookmark. (required) + :param str folder: The document folder. + :param str storage: The document storage. + :return: BookmarksResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.post_bookmark_with_http_info(name, bookmark_path, bookmarks, **kwargs) + else: + (data) = self.post_bookmark_with_http_info(name, bookmark_path, bookmarks, **kwargs) + return data + + def post_bookmark_with_http_info(self, name, bookmark_path, bookmarks, **kwargs): + """ + Add document bookmarks. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.post_bookmark_with_http_info(name, bookmark_path, bookmarks, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str bookmark_path: The bookmark path. (required) + :param list[Bookmark] bookmarks: The array of bookmark. (required) + :param str folder: The document folder. + :param str storage: The document storage. + :return: BookmarksResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'bookmark_path', 'bookmarks', 'folder', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method post_bookmark" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `post_bookmark`") + # verify the required parameter 'bookmark_path' is set + if ('bookmark_path' not in params) or (params['bookmark_path'] is None): + raise ValueError("Missing the required parameter `bookmark_path` when calling `post_bookmark`") + # verify the required parameter 'bookmarks' is set + if ('bookmarks' not in params) or (params['bookmarks'] is None): + raise ValueError("Missing the required parameter `bookmarks` when calling `post_bookmark`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'bookmark_path' in params: + path_params['bookmarkPath'] = params['bookmark_path'] + + query_params = [] + if 'folder' in params: + query_params.append(('folder', params['folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'bookmarks' in params: + body_params = params['bookmarks'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/bookmarks/bookmark/{bookmarkPath}', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='BookmarksResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def post_change_password_document_in_storage(self, name, owner_password, new_user_password, new_owner_password, **kwargs): """ Change document password in storage. @@ -18249,7 +20139,7 @@ def post_change_password_document_in_storage_with_http_info(self, name, owner_pa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/changepassword', 'POST', path_params, @@ -18266,7 +20156,7 @@ def post_change_password_document_in_storage_with_http_info(self, name, owner_pa _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_create_field(self, name, page, **kwargs): + def post_create_field(self, name, page, field, **kwargs): """ Create field. This method makes a synchronous HTTP request by default. To make an @@ -18275,13 +20165,13 @@ def post_create_field(self, name, page, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_create_field(name, page, callback=callback_function) + >>> thread = api.post_create_field(name, page, field, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param int page: Document page number. (required) - :param Field field: with the field data. + :param Field field: Field with the field data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -18290,12 +20180,12 @@ def post_create_field(self, name, page, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_create_field_with_http_info(name, page, **kwargs) + return self.post_create_field_with_http_info(name, page, field, **kwargs) else: - (data) = self.post_create_field_with_http_info(name, page, **kwargs) + (data) = self.post_create_field_with_http_info(name, page, field, **kwargs) return data - def post_create_field_with_http_info(self, name, page, **kwargs): + def post_create_field_with_http_info(self, name, page, field, **kwargs): """ Create field. This method makes a synchronous HTTP request by default. To make an @@ -18304,13 +20194,13 @@ def post_create_field_with_http_info(self, name, page, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_create_field_with_http_info(name, page, callback=callback_function) + >>> thread = api.post_create_field_with_http_info(name, page, field, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param int page: Document page number. (required) - :param Field field: with the field data. + :param Field field: Field with the field data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -18339,6 +20229,9 @@ def post_create_field_with_http_info(self, name, page, **kwargs): # verify the required parameter 'page' is set if ('page' not in params) or (params['page'] is None): raise ValueError("Missing the required parameter `page` when calling `post_create_field`") + # verify the required parameter 'field' is set + if ('field' not in params) or (params['field'] is None): + raise ValueError("Missing the required parameter `field` when calling `post_create_field`") collection_formats = {} @@ -18372,7 +20265,7 @@ def post_create_field_with_http_info(self, name, page, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/fields', 'POST', path_params, @@ -18491,7 +20384,7 @@ def post_decrypt_document_in_storage_with_http_info(self, name, password, **kwar select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/decrypt', 'POST', path_params, @@ -18618,7 +20511,7 @@ def post_document_image_footer_with_http_info(self, name, image_footer, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/footer/image', 'POST', path_params, @@ -18745,7 +20638,7 @@ def post_document_image_header_with_http_info(self, name, image_header, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/header/image', 'POST', path_params, @@ -18872,7 +20765,7 @@ def post_document_page_number_stamps_with_http_info(self, name, stamp, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/stamps/pagenumber', 'POST', path_params, @@ -18999,7 +20892,7 @@ def post_document_text_footer_with_http_info(self, name, text_footer, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/footer/text', 'POST', path_params, @@ -19126,7 +21019,7 @@ def post_document_text_header_with_http_info(self, name, text_header, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/header/text', 'POST', path_params, @@ -19245,7 +21138,7 @@ def post_document_text_replace_with_http_info(self, name, text_replace, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/text/replace', 'POST', path_params, @@ -19278,8 +21171,8 @@ def post_encrypt_document_in_storage(self, name, user_password, owner_password, :param str name: Document name. (required) :param str user_password: User password (encrypted Base64). (required) :param str owner_password: Owner password (encrypted Base64). (required) - :param str crypto_algorithm: Cryptographic algorithm, see for details. (required) - :param list[PermissionsFlags] permissions_flags: Array of document permissions, see for details. + :param str crypto_algorithm: Cryptographic algorithm, see CryptoAlgorithm for details. (required) + :param list[PermissionsFlags] permissions_flags: Array of document permissions, see PermissionsFlags for details. :param bool use_pdf20: Support for revision 6 (Extension 8). :param str storage: The document storage. :param str folder: The document folder. @@ -19310,8 +21203,8 @@ def post_encrypt_document_in_storage_with_http_info(self, name, user_password, o :param str name: Document name. (required) :param str user_password: User password (encrypted Base64). (required) :param str owner_password: Owner password (encrypted Base64). (required) - :param str crypto_algorithm: Cryptographic algorithm, see for details. (required) - :param list[PermissionsFlags] permissions_flags: Array of document permissions, see for details. + :param str crypto_algorithm: Cryptographic algorithm, see CryptoAlgorithm for details. (required) + :param list[PermissionsFlags] permissions_flags: Array of document permissions, see PermissionsFlags for details. :param bool use_pdf20: Support for revision 6 (Extension 8). :param str storage: The document storage. :param str folder: The document folder. @@ -19364,7 +21257,7 @@ def post_encrypt_document_in_storage_with_http_info(self, name, user_password, o query_params.append(('cryptoAlgorithm', params['crypto_algorithm'])) if 'permissions_flags' in params: query_params.append(('permissionsFlags', params['permissions_flags'])) - collection_formats['permissionsFlags'] = 'multi' + collection_formats['permissionsFlags'] = 'csv' if 'use_pdf20' in params: query_params.append(('usePdf20', params['use_pdf20'])) if 'storage' in params: @@ -19387,9 +21280,133 @@ def post_encrypt_document_in_storage_with_http_info(self, name, user_password, o select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/encrypt', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AsposeResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def post_flatten_document(self, name, **kwargs): + """ + Flatten the document. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.post_flatten_document(name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param bool update_appearances: If set, all field appearances will be regenerated before flattening. This option may help if field is incorrectly flattened. This option may decrease performance.. + :param bool call_events: If set, formatting and other JavaScript events will be called. + :param bool hide_buttons: If set, buttons will be removed from flattened document. + :param str storage: The document storage. + :param str folder: The document folder. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.post_flatten_document_with_http_info(name, **kwargs) + else: + (data) = self.post_flatten_document_with_http_info(name, **kwargs) + return data + + def post_flatten_document_with_http_info(self, name, **kwargs): + """ + Flatten the document. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.post_flatten_document_with_http_info(name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param bool update_appearances: If set, all field appearances will be regenerated before flattening. This option may help if field is incorrectly flattened. This option may decrease performance.. + :param bool call_events: If set, formatting and other JavaScript events will be called. + :param bool hide_buttons: If set, buttons will be removed from flattened document. + :param str storage: The document storage. + :param str folder: The document folder. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'update_appearances', 'call_events', 'hide_buttons', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method post_flatten_document" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `post_flatten_document`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'update_appearances' in params: + query_params.append(('updateAppearances', params['update_appearances'])) + if 'call_events' in params: + query_params.append(('callEvents', params['call_events'])) + if 'hide_buttons' in params: + query_params.append(('hideButtons', params['hide_buttons'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/encrypt', 'POST', + return self.api_client.call_api('/pdf/{name}/flatten', 'POST', path_params, query_params, header_params, @@ -19404,61 +21421,57 @@ def post_encrypt_document_in_storage_with_http_info(self, name, user_password, o _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_flatten_document(self, name, **kwargs): + def post_import_fields_from_fdf(self, name, **kwargs): """ - Flatten the document. + Update fields from FDF file in request. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_flatten_document(name, callback=callback_function) + >>> thread = api.post_import_fields_from_fdf(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param bool update_appearances: If set, all field appearances will be regenerated before flattening. This option may help if field is incorrectly flattened. This option may decrease performance.. - :param bool call_events: If set, formatting and other JavaScript events will be called. - :param bool hide_buttons: If set, buttons will be removed from flattened document. :param str storage: The document storage. :param str folder: The document folder. + :param file fdf_data: Fdf file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_flatten_document_with_http_info(name, **kwargs) + return self.post_import_fields_from_fdf_with_http_info(name, **kwargs) else: - (data) = self.post_flatten_document_with_http_info(name, **kwargs) + (data) = self.post_import_fields_from_fdf_with_http_info(name, **kwargs) return data - def post_flatten_document_with_http_info(self, name, **kwargs): + def post_import_fields_from_fdf_with_http_info(self, name, **kwargs): """ - Flatten the document. + Update fields from FDF file in request. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_flatten_document_with_http_info(name, callback=callback_function) + >>> thread = api.post_import_fields_from_fdf_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param bool update_appearances: If set, all field appearances will be regenerated before flattening. This option may help if field is incorrectly flattened. This option may decrease performance.. - :param bool call_events: If set, formatting and other JavaScript events will be called. - :param bool hide_buttons: If set, buttons will be removed from flattened document. :param str storage: The document storage. :param str folder: The document folder. + :param file fdf_data: Fdf file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'update_appearances', 'call_events', 'hide_buttons', 'storage', 'folder'] + all_params = ['name', 'storage', 'folder', 'fdf_data'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -19469,13 +21482,13 @@ def post_flatten_document_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method post_flatten_document" % key + " to method post_import_fields_from_fdf" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `post_flatten_document`") + raise ValueError("Missing the required parameter `name` when calling `post_import_fields_from_fdf`") collection_formats = {} @@ -19485,12 +21498,6 @@ def post_flatten_document_with_http_info(self, name, **kwargs): path_params['name'] = params['name'] query_params = [] - if 'update_appearances' in params: - query_params.append(('updateAppearances', params['update_appearances'])) - if 'call_events' in params: - query_params.append(('callEvents', params['call_events'])) - if 'hide_buttons' in params: - query_params.append(('hideButtons', params['hide_buttons'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -19500,6 +21507,8 @@ def post_flatten_document_with_http_info(self, name, **kwargs): form_params = [] local_var_files = {} + if 'fdf_data' in params: + local_var_files['fdfData'] = params['fdf_data'] body_params = None # HTTP header `Accept` @@ -19508,12 +21517,12 @@ def post_flatten_document_with_http_info(self, name, **kwargs): # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['application/json']) + select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/flatten', 'POST', + return self.api_client.call_api('/pdf/{name}/import/fdf', 'POST', path_params, query_params, header_params, @@ -19528,69 +21537,57 @@ def post_flatten_document_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_insert_image(self, name, page_number, llx, lly, urx, ury, **kwargs): + def post_import_fields_from_xfdf(self, name, **kwargs): """ - Insert image to document page. + Update fields from XFDF file in request. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_insert_image(name, page_number, llx, lly, urx, ury, callback=callback_function) + >>> thread = api.post_import_fields_from_xfdf(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param float llx: Coordinate lower left X. (required) - :param float lly: Coordinate lower left Y. (required) - :param float urx: Coordinate upper right X. (required) - :param float ury: Coordinate upper right Y. (required) - :param str image_file_path: Path to image file if specified. Request content is used otherwise. :param str storage: The document storage. :param str folder: The document folder. - :param file image: Image file. + :param file xfdf_data: Xfdf file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_insert_image_with_http_info(name, page_number, llx, lly, urx, ury, **kwargs) + return self.post_import_fields_from_xfdf_with_http_info(name, **kwargs) else: - (data) = self.post_insert_image_with_http_info(name, page_number, llx, lly, urx, ury, **kwargs) + (data) = self.post_import_fields_from_xfdf_with_http_info(name, **kwargs) return data - def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury, **kwargs): + def post_import_fields_from_xfdf_with_http_info(self, name, **kwargs): """ - Insert image to document page. + Update fields from XFDF file in request. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_insert_image_with_http_info(name, page_number, llx, lly, urx, ury, callback=callback_function) + >>> thread = api.post_import_fields_from_xfdf_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param float llx: Coordinate lower left X. (required) - :param float lly: Coordinate lower left Y. (required) - :param float urx: Coordinate upper right X. (required) - :param float ury: Coordinate upper right Y. (required) - :param str image_file_path: Path to image file if specified. Request content is used otherwise. :param str storage: The document storage. :param str folder: The document folder. - :param file image: Image file. + :param file xfdf_data: Xfdf file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'llx', 'lly', 'urx', 'ury', 'image_file_path', 'storage', 'folder', 'image'] + all_params = ['name', 'storage', 'folder', 'xfdf_data'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -19601,28 +21598,13 @@ def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method post_insert_image" % key + " to method post_import_fields_from_xfdf" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `post_insert_image`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `post_insert_image`") - # verify the required parameter 'llx' is set - if ('llx' not in params) or (params['llx'] is None): - raise ValueError("Missing the required parameter `llx` when calling `post_insert_image`") - # verify the required parameter 'lly' is set - if ('lly' not in params) or (params['lly'] is None): - raise ValueError("Missing the required parameter `lly` when calling `post_insert_image`") - # verify the required parameter 'urx' is set - if ('urx' not in params) or (params['urx'] is None): - raise ValueError("Missing the required parameter `urx` when calling `post_insert_image`") - # verify the required parameter 'ury' is set - if ('ury' not in params) or (params['ury'] is None): - raise ValueError("Missing the required parameter `ury` when calling `post_insert_image`") + raise ValueError("Missing the required parameter `name` when calling `post_import_fields_from_xfdf`") collection_formats = {} @@ -19630,20 +21612,8 @@ def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] query_params = [] - if 'llx' in params: - query_params.append(('llx', params['llx'])) - if 'lly' in params: - query_params.append(('lly', params['lly'])) - if 'urx' in params: - query_params.append(('urx', params['urx'])) - if 'ury' in params: - query_params.append(('ury', params['ury'])) - if 'image_file_path' in params: - query_params.append(('imageFilePath', params['image_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -19653,8 +21623,8 @@ def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury form_params = [] local_var_files = {} - if 'image' in params: - local_var_files['image'] = params['image'] + if 'xfdf_data' in params: + local_var_files['xfdfData'] = params['xfdf_data'] body_params = None # HTTP header `Accept` @@ -19666,9 +21636,9 @@ def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images', 'POST', + return self.api_client.call_api('/pdf/{name}/import/xfdf', 'POST', path_params, query_params, header_params, @@ -19683,59 +21653,57 @@ def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_move_file(self, src, dest, **kwargs): + def post_import_fields_from_xml(self, name, **kwargs): """ - Move a specific file + Update fields from XML file in request. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_move_file(src, dest, callback=callback_function) + >>> thread = api.post_import_fields_from_xml(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src: Source file path e.g. /fileSource.ext (required) - :param str dest: Destination file path e.g. /fileDestination.ext (required) - :param str version_id: Source file's version, - :param str storage: User's source storage name - :param str dest_storage: User's destination storage name + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :param file xml_data: Xml file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_move_file_with_http_info(src, dest, **kwargs) + return self.post_import_fields_from_xml_with_http_info(name, **kwargs) else: - (data) = self.post_move_file_with_http_info(src, dest, **kwargs) + (data) = self.post_import_fields_from_xml_with_http_info(name, **kwargs) return data - def post_move_file_with_http_info(self, src, dest, **kwargs): + def post_import_fields_from_xml_with_http_info(self, name, **kwargs): """ - Move a specific file + Update fields from XML file in request. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_move_file_with_http_info(src, dest, callback=callback_function) + >>> thread = api.post_import_fields_from_xml_with_http_info(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src: Source file path e.g. /fileSource.ext (required) - :param str dest: Destination file path e.g. /fileDestination.ext (required) - :param str version_id: Source file's version, - :param str storage: User's source storage name - :param str dest_storage: User's destination storage name + :param str name: The document name. (required) + :param str storage: The document storage. + :param str folder: The document folder. + :param file xml_data: Xml file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['src', 'dest', 'version_id', 'storage', 'dest_storage'] + all_params = ['name', 'storage', 'folder', 'xml_data'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -19746,38 +21714,33 @@ def post_move_file_with_http_info(self, src, dest, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method post_move_file" % key + " to method post_import_fields_from_xml" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'src' is set - if ('src' not in params) or (params['src'] is None): - raise ValueError("Missing the required parameter `src` when calling `post_move_file`") - # verify the required parameter 'dest' is set - if ('dest' not in params) or (params['dest'] is None): - raise ValueError("Missing the required parameter `dest` when calling `post_move_file`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `post_import_fields_from_xml`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'src' in params: - query_params.append(('src', params['src'])) - if 'dest' in params: - query_params.append(('dest', params['dest'])) - if 'version_id' in params: - query_params.append(('versionId', params['version_id'])) if 'storage' in params: query_params.append(('storage', params['storage'])) - if 'dest_storage' in params: - query_params.append(('destStorage', params['dest_storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} form_params = [] local_var_files = {} + if 'xml_data' in params: + local_var_files['xmlData'] = params['xml_data'] body_params = None # HTTP header `Accept` @@ -19789,9 +21752,9 @@ def post_move_file_with_http_info(self, src, dest, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/file', 'POST', + return self.api_client.call_api('/pdf/{name}/import/xml', 'POST', path_params, query_params, header_params, @@ -19806,57 +21769,69 @@ def post_move_file_with_http_info(self, src, dest, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_move_folder(self, src, dest, **kwargs): + def post_insert_image(self, name, page_number, llx, lly, urx, ury, **kwargs): """ - Move a specific folder + Insert image to document page. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_move_folder(src, dest, callback=callback_function) + >>> thread = api.post_insert_image(name, page_number, llx, lly, urx, ury, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src: Source folder path e.g. /Folder1 (required) - :param str dest: Destination folder path e.g. /Folder2 (required) - :param str storage: User's source storage name - :param str dest_storage: User's destination storage name + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param float llx: Coordinate lower left X. (required) + :param float lly: Coordinate lower left Y. (required) + :param float urx: Coordinate upper right X. (required) + :param float ury: Coordinate upper right Y. (required) + :param str image_file_path: Path to image file if specified. Request content is used otherwise. + :param str storage: The document storage. + :param str folder: The document folder. + :param file image: Image file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_move_folder_with_http_info(src, dest, **kwargs) + return self.post_insert_image_with_http_info(name, page_number, llx, lly, urx, ury, **kwargs) else: - (data) = self.post_move_folder_with_http_info(src, dest, **kwargs) + (data) = self.post_insert_image_with_http_info(name, page_number, llx, lly, urx, ury, **kwargs) return data - def post_move_folder_with_http_info(self, src, dest, **kwargs): + def post_insert_image_with_http_info(self, name, page_number, llx, lly, urx, ury, **kwargs): """ - Move a specific folder + Insert image to document page. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_move_folder_with_http_info(src, dest, callback=callback_function) + >>> thread = api.post_insert_image_with_http_info(name, page_number, llx, lly, urx, ury, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str src: Source folder path e.g. /Folder1 (required) - :param str dest: Destination folder path e.g. /Folder2 (required) - :param str storage: User's source storage name - :param str dest_storage: User's destination storage name + :param str name: The document name. (required) + :param int page_number: The page number. (required) + :param float llx: Coordinate lower left X. (required) + :param float lly: Coordinate lower left Y. (required) + :param float urx: Coordinate upper right X. (required) + :param float ury: Coordinate upper right Y. (required) + :param str image_file_path: Path to image file if specified. Request content is used otherwise. + :param str storage: The document storage. + :param str folder: The document folder. + :param file image: Image file. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['src', 'dest', 'storage', 'dest_storage'] + all_params = ['name', 'page_number', 'llx', 'lly', 'urx', 'ury', 'image_file_path', 'storage', 'folder', 'image'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -19867,36 +21842,60 @@ def post_move_folder_with_http_info(self, src, dest, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method post_move_folder" % key + " to method post_insert_image" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'src' is set - if ('src' not in params) or (params['src'] is None): - raise ValueError("Missing the required parameter `src` when calling `post_move_folder`") - # verify the required parameter 'dest' is set - if ('dest' not in params) or (params['dest'] is None): - raise ValueError("Missing the required parameter `dest` when calling `post_move_folder`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `post_insert_image`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `post_insert_image`") + # verify the required parameter 'llx' is set + if ('llx' not in params) or (params['llx'] is None): + raise ValueError("Missing the required parameter `llx` when calling `post_insert_image`") + # verify the required parameter 'lly' is set + if ('lly' not in params) or (params['lly'] is None): + raise ValueError("Missing the required parameter `lly` when calling `post_insert_image`") + # verify the required parameter 'urx' is set + if ('urx' not in params) or (params['urx'] is None): + raise ValueError("Missing the required parameter `urx` when calling `post_insert_image`") + # verify the required parameter 'ury' is set + if ('ury' not in params) or (params['ury'] is None): + raise ValueError("Missing the required parameter `ury` when calling `post_insert_image`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] - if 'src' in params: - query_params.append(('src', params['src'])) - if 'dest' in params: - query_params.append(('dest', params['dest'])) + if 'llx' in params: + query_params.append(('llx', params['llx'])) + if 'lly' in params: + query_params.append(('lly', params['lly'])) + if 'urx' in params: + query_params.append(('urx', params['urx'])) + if 'ury' in params: + query_params.append(('ury', params['ury'])) + if 'image_file_path' in params: + query_params.append(('imageFilePath', params['image_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) - if 'dest_storage' in params: - query_params.append(('destStorage', params['dest_storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} form_params = [] local_var_files = {} + if 'image' in params: + local_var_files['image'] = params['image'] body_params = None # HTTP header `Accept` @@ -19905,12 +21904,12 @@ def post_move_folder_with_http_info(self, src, dest, **kwargs): # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['application/json']) + select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/folder', 'POST', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images', 'POST', path_params, query_params, header_params, @@ -20034,7 +22033,7 @@ def post_move_page_with_http_info(self, name, page_number, new_index, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/movePage', 'POST', path_params, @@ -20051,7 +22050,7 @@ def post_move_page_with_http_info(self, name, page_number, new_index, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_optimize_document(self, name, **kwargs): + def post_optimize_document(self, name, options, **kwargs): """ Optimize document. This method makes a synchronous HTTP request by default. To make an @@ -20060,12 +22059,12 @@ def post_optimize_document(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_optimize_document(name, callback=callback_function) + >>> thread = api.post_optimize_document(name, options, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param OptimizeOptions options: The optimization options. + :param OptimizeOptions options: The optimization options. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -20074,12 +22073,12 @@ def post_optimize_document(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_optimize_document_with_http_info(name, **kwargs) + return self.post_optimize_document_with_http_info(name, options, **kwargs) else: - (data) = self.post_optimize_document_with_http_info(name, **kwargs) + (data) = self.post_optimize_document_with_http_info(name, options, **kwargs) return data - def post_optimize_document_with_http_info(self, name, **kwargs): + def post_optimize_document_with_http_info(self, name, options, **kwargs): """ Optimize document. This method makes a synchronous HTTP request by default. To make an @@ -20088,12 +22087,12 @@ def post_optimize_document_with_http_info(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_optimize_document_with_http_info(name, callback=callback_function) + >>> thread = api.post_optimize_document_with_http_info(name, options, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param OptimizeOptions options: The optimization options. + :param OptimizeOptions options: The optimization options. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -20119,6 +22118,9 @@ def post_optimize_document_with_http_info(self, name, **kwargs): # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): raise ValueError("Missing the required parameter `name` when calling `post_optimize_document`") + # verify the required parameter 'options' is set + if ('options' not in params) or (params['options'] is None): + raise ValueError("Missing the required parameter `options` when calling `post_optimize_document`") collection_formats = {} @@ -20150,7 +22152,7 @@ def post_optimize_document_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/optimize', 'POST', path_params, @@ -20276,7 +22278,7 @@ def post_page_caret_annotations_with_http_info(self, name, page_number, annotati select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/caret', 'POST', path_params, @@ -20402,7 +22404,7 @@ def post_page_circle_annotations_with_http_info(self, name, page_number, annotat select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/circle', 'POST', path_params, @@ -20528,7 +22530,7 @@ def post_page_file_attachment_annotations_with_http_info(self, name, page_number select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/fileattachment', 'POST', path_params, @@ -20654,7 +22656,7 @@ def post_page_free_text_annotations_with_http_info(self, name, page_number, anno select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/freetext', 'POST', path_params, @@ -20780,7 +22782,7 @@ def post_page_highlight_annotations_with_http_info(self, name, page_number, anno select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/highlight', 'POST', path_params, @@ -20906,7 +22908,7 @@ def post_page_image_stamps_with_http_info(self, name, page_number, stamps, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamps/image', 'POST', path_params, @@ -21032,7 +23034,7 @@ def post_page_ink_annotations_with_http_info(self, name, page_number, annotation select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/ink', 'POST', path_params, @@ -21158,7 +23160,7 @@ def post_page_line_annotations_with_http_info(self, name, page_number, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/line', 'POST', path_params, @@ -21284,7 +23286,7 @@ def post_page_link_annotations_with_http_info(self, name, page_number, links, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/links', 'POST', path_params, @@ -21410,7 +23412,7 @@ def post_page_movie_annotations_with_http_info(self, name, page_number, annotati select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/movie', 'POST', path_params, @@ -21536,7 +23538,7 @@ def post_page_pdf_page_stamps_with_http_info(self, name, page_number, stamps, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamps/pdfpage', 'POST', path_params, @@ -21662,7 +23664,7 @@ def post_page_poly_line_annotations_with_http_info(self, name, page_number, anno select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/polyline', 'POST', path_params, @@ -21788,7 +23790,7 @@ def post_page_polygon_annotations_with_http_info(self, name, page_number, annota select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/polygon', 'POST', path_params, @@ -21914,7 +23916,7 @@ def post_page_redaction_annotations_with_http_info(self, name, page_number, anno select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/redaction', 'POST', path_params, @@ -22040,7 +24042,7 @@ def post_page_screen_annotations_with_http_info(self, name, page_number, annotat select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/screen', 'POST', path_params, @@ -22166,7 +24168,7 @@ def post_page_sound_annotations_with_http_info(self, name, page_number, annotati select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/sound', 'POST', path_params, @@ -22292,7 +24294,7 @@ def post_page_square_annotations_with_http_info(self, name, page_number, annotat select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/square', 'POST', path_params, @@ -22418,7 +24420,7 @@ def post_page_squiggly_annotations_with_http_info(self, name, page_number, annot select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/squiggly', 'POST', path_params, @@ -22544,7 +24546,7 @@ def post_page_stamp_annotations_with_http_info(self, name, page_number, annotati select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/stamp', 'POST', path_params, @@ -22670,7 +24672,7 @@ def post_page_strike_out_annotations_with_http_info(self, name, page_number, ann select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/strikeout', 'POST', path_params, @@ -22796,7 +24798,7 @@ def post_page_tables_with_http_info(self, name, page_number, tables, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/tables', 'POST', path_params, @@ -22922,7 +24924,7 @@ def post_page_text_annotations_with_http_info(self, name, page_number, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/text', 'POST', path_params, @@ -23048,7 +25050,7 @@ def post_page_text_replace_with_http_info(self, name, page_number, text_replace_ select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/text/replace', 'POST', path_params, @@ -23174,7 +25176,7 @@ def post_page_text_stamps_with_http_info(self, name, page_number, stamps, **kwar select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamps/text', 'POST', path_params, @@ -23300,7 +25302,7 @@ def post_page_underline_annotations_with_http_info(self, name, page_number, anno select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/annotations/underline', 'POST', path_params, @@ -23426,7 +25428,7 @@ def post_popup_annotation_with_http_info(self, name, annotation_id, annotation, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/{annotationId}/popup', 'POST', path_params, @@ -23443,7 +25445,7 @@ def post_popup_annotation_with_http_info(self, name, annotation_id, annotation, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_sign_document(self, name, **kwargs): + def post_sign_document(self, name, sign, **kwargs): """ Sign document. This method makes a synchronous HTTP request by default. To make an @@ -23452,12 +25454,12 @@ def post_sign_document(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_sign_document(name, callback=callback_function) + >>> thread = api.post_sign_document(name, sign, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param Signature signature: Signature object containing signature data. + :param Signature sign: Signature object containing signature data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -23466,12 +25468,12 @@ def post_sign_document(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_sign_document_with_http_info(name, **kwargs) + return self.post_sign_document_with_http_info(name, sign, **kwargs) else: - (data) = self.post_sign_document_with_http_info(name, **kwargs) + (data) = self.post_sign_document_with_http_info(name, sign, **kwargs) return data - def post_sign_document_with_http_info(self, name, **kwargs): + def post_sign_document_with_http_info(self, name, sign, **kwargs): """ Sign document. This method makes a synchronous HTTP request by default. To make an @@ -23480,12 +25482,12 @@ def post_sign_document_with_http_info(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_sign_document_with_http_info(name, callback=callback_function) + >>> thread = api.post_sign_document_with_http_info(name, sign, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param Signature signature: Signature object containing signature data. + :param Signature sign: Signature object containing signature data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -23493,7 +25495,7 @@ def post_sign_document_with_http_info(self, name, **kwargs): returns the request thread. """ - all_params = ['name', 'signature', 'storage', 'folder'] + all_params = ['name', 'sign', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -23511,6 +25513,9 @@ def post_sign_document_with_http_info(self, name, **kwargs): # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): raise ValueError("Missing the required parameter `name` when calling `post_sign_document`") + # verify the required parameter 'sign' is set + if ('sign' not in params) or (params['sign'] is None): + raise ValueError("Missing the required parameter `sign` when calling `post_sign_document`") collection_formats = {} @@ -23531,8 +25536,8 @@ def post_sign_document_with_http_info(self, name, **kwargs): local_var_files = {} body_params = None - if 'signature' in params: - body_params = params['signature'] + if 'sign' in params: + body_params = params['sign'] # HTTP header `Accept` header_params['Accept'] = self.api_client.\ select_header_accept(['application/json']) @@ -23542,7 +25547,7 @@ def post_sign_document_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/sign', 'POST', path_params, @@ -23559,7 +25564,7 @@ def post_sign_document_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def post_sign_page(self, name, page_number, **kwargs): + def post_sign_page(self, name, page_number, sign, **kwargs): """ Sign page. This method makes a synchronous HTTP request by default. To make an @@ -23568,13 +25573,13 @@ def post_sign_page(self, name, page_number, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_sign_page(name, page_number, callback=callback_function) + >>> thread = api.post_sign_page(name, page_number, sign, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param int page_number: The page number. (required) - :param Signature signature: Signature object containing signature data. + :param Signature sign: Signature object containing signature data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -23583,12 +25588,12 @@ def post_sign_page(self, name, page_number, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.post_sign_page_with_http_info(name, page_number, **kwargs) + return self.post_sign_page_with_http_info(name, page_number, sign, **kwargs) else: - (data) = self.post_sign_page_with_http_info(name, page_number, **kwargs) + (data) = self.post_sign_page_with_http_info(name, page_number, sign, **kwargs) return data - def post_sign_page_with_http_info(self, name, page_number, **kwargs): + def post_sign_page_with_http_info(self, name, page_number, sign, **kwargs): """ Sign page. This method makes a synchronous HTTP request by default. To make an @@ -23597,13 +25602,13 @@ def post_sign_page_with_http_info(self, name, page_number, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.post_sign_page_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.post_sign_page_with_http_info(name, page_number, sign, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param int page_number: The page number. (required) - :param Signature signature: Signature object containing signature data. + :param Signature sign: Signature object containing signature data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -23611,7 +25616,7 @@ def post_sign_page_with_http_info(self, name, page_number, **kwargs): returns the request thread. """ - all_params = ['name', 'page_number', 'signature', 'storage', 'folder'] + all_params = ['name', 'page_number', 'sign', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -23632,6 +25637,9 @@ def post_sign_page_with_http_info(self, name, page_number, **kwargs): # verify the required parameter 'page_number' is set if ('page_number' not in params) or (params['page_number'] is None): raise ValueError("Missing the required parameter `page_number` when calling `post_sign_page`") + # verify the required parameter 'sign' is set + if ('sign' not in params) or (params['sign'] is None): + raise ValueError("Missing the required parameter `sign` when calling `post_sign_page`") collection_formats = {} @@ -23654,8 +25662,8 @@ def post_sign_page_with_http_info(self, name, page_number, **kwargs): local_var_files = {} body_params = None - if 'signature' in params: - body_params = params['signature'] + if 'sign' in params: + body_params = params['sign'] # HTTP header `Accept` header_params['Accept'] = self.api_client.\ select_header_accept(['application/json']) @@ -23665,7 +25673,7 @@ def post_sign_page_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/sign', 'POST', path_params, @@ -23789,7 +25797,7 @@ def post_split_document_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/split', 'POST', path_params, @@ -23901,7 +25909,7 @@ def put_add_new_page_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages', 'PUT', path_params, @@ -23918,7 +25926,7 @@ def put_add_new_page_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_add_text(self, name, page_number, **kwargs): + def put_add_text(self, name, page_number, paragraph, **kwargs): """ Add text to PDF document page. This method makes a synchronous HTTP request by default. To make an @@ -23927,13 +25935,13 @@ def put_add_text(self, name, page_number, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_add_text(name, page_number, callback=callback_function) + >>> thread = api.put_add_text(name, page_number, paragraph, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param int page_number: Number of page (starting from 1). (required) - :param Paragraph paragraph: Paragraph data. + :param Paragraph paragraph: Paragraph data. (required) :param str folder: Document folder. :param str storage: The document storage. :return: AsposeResponse @@ -23942,12 +25950,12 @@ def put_add_text(self, name, page_number, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_add_text_with_http_info(name, page_number, **kwargs) + return self.put_add_text_with_http_info(name, page_number, paragraph, **kwargs) else: - (data) = self.put_add_text_with_http_info(name, page_number, **kwargs) + (data) = self.put_add_text_with_http_info(name, page_number, paragraph, **kwargs) return data - def put_add_text_with_http_info(self, name, page_number, **kwargs): + def put_add_text_with_http_info(self, name, page_number, paragraph, **kwargs): """ Add text to PDF document page. This method makes a synchronous HTTP request by default. To make an @@ -23956,13 +25964,13 @@ def put_add_text_with_http_info(self, name, page_number, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_add_text_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.put_add_text_with_http_info(name, page_number, paragraph, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param int page_number: Number of page (starting from 1). (required) - :param Paragraph paragraph: Paragraph data. + :param Paragraph paragraph: Paragraph data. (required) :param str folder: Document folder. :param str storage: The document storage. :return: AsposeResponse @@ -23991,6 +25999,9 @@ def put_add_text_with_http_info(self, name, page_number, **kwargs): # verify the required parameter 'page_number' is set if ('page_number' not in params) or (params['page_number'] is None): raise ValueError("Missing the required parameter `page_number` when calling `put_add_text`") + # verify the required parameter 'paragraph' is set + if ('paragraph' not in params) or (params['paragraph'] is None): + raise ValueError("Missing the required parameter `paragraph` when calling `put_add_text`") collection_formats = {} @@ -24024,7 +26035,7 @@ def put_add_text_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/text', 'PUT', path_params, @@ -24128,7 +26139,7 @@ def put_annotations_flatten_with_http_info(self, name, **kwargs): query_params.append(('endPage', params['end_page'])) if 'annotation_types' in params: query_params.append(('annotationTypes', params['annotation_types'])) - collection_formats['annotationTypes'] = 'multi' + collection_formats['annotationTypes'] = 'csv' if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: @@ -24149,7 +26160,7 @@ def put_annotations_flatten_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/flatten', 'PUT', path_params, @@ -24166,6 +26177,132 @@ def put_annotations_flatten_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + def put_bookmark(self, name, bookmark_path, bookmark, **kwargs): + """ + Update document bookmark. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_bookmark(name, bookmark_path, bookmark, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str bookmark_path: The bookmark path. (required) + :param Bookmark bookmark: The bookmark. (required) + :param str folder: The document folder. + :param str storage: The document storage. + :return: BookmarkResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.put_bookmark_with_http_info(name, bookmark_path, bookmark, **kwargs) + else: + (data) = self.put_bookmark_with_http_info(name, bookmark_path, bookmark, **kwargs) + return data + + def put_bookmark_with_http_info(self, name, bookmark_path, bookmark, **kwargs): + """ + Update document bookmark. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_bookmark_with_http_info(name, bookmark_path, bookmark, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str bookmark_path: The bookmark path. (required) + :param Bookmark bookmark: The bookmark. (required) + :param str folder: The document folder. + :param str storage: The document storage. + :return: BookmarkResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'bookmark_path', 'bookmark', 'folder', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method put_bookmark" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_bookmark`") + # verify the required parameter 'bookmark_path' is set + if ('bookmark_path' not in params) or (params['bookmark_path'] is None): + raise ValueError("Missing the required parameter `bookmark_path` when calling `put_bookmark`") + # verify the required parameter 'bookmark' is set + if ('bookmark' not in params) or (params['bookmark'] is None): + raise ValueError("Missing the required parameter `bookmark` when calling `put_bookmark`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'bookmark_path' in params: + path_params['bookmarkPath'] = params['bookmark_path'] + + query_params = [] + if 'folder' in params: + query_params.append(('folder', params['folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'bookmark' in params: + body_params = params['bookmark'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/bookmarks/bookmark/{bookmarkPath}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='BookmarkResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def put_caret_annotation(self, name, annotation_id, annotation, **kwargs): """ Replace document caret annotation @@ -24275,7 +26412,7 @@ def put_caret_annotation_with_http_info(self, name, annotation_id, annotation, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/caret/{annotationId}', 'PUT', path_params, @@ -24408,7 +26545,7 @@ def put_change_password_document_with_http_info(self, out_path, owner_password, select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/changepassword', 'PUT', path_params, @@ -24534,7 +26671,7 @@ def put_circle_annotation_with_http_info(self, name, annotation_id, annotation, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/circle/{annotationId}', 'PUT', path_params, @@ -24551,57 +26688,169 @@ def put_circle_annotation_with_http_info(self, name, annotation_id, annotation, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_create(self, path, file, **kwargs): + def put_create_document(self, name, **kwargs): """ - Upload a specific file + Create empty document. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_create(path, file, callback=callback_function) + >>> thread = api.put_create_document(name, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Path where to upload including filename and extension e.g. /file.ext or /Folder 1/file.ext (required) - :param file file: File to upload (required) - :param str version_id: Source file's version - :param str storage: User's storage name + :param str name: The new document name. (required) + :param str storage: The document storage. + :param str folder: The new document folder. + :return: DocumentResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.put_create_document_with_http_info(name, **kwargs) + else: + (data) = self.put_create_document_with_http_info(name, **kwargs) + return data + + def put_create_document_with_http_info(self, name, **kwargs): + """ + Create empty document. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_create_document_with_http_info(name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The new document name. (required) + :param str storage: The document storage. + :param str folder: The new document folder. + :return: DocumentResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'storage', 'folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method put_create_document" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_create_document`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='DocumentResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def put_decrypt_document(self, out_path, password, **kwargs): + """ + Decrypt document from content. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_decrypt_document(out_path, password, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) + :param str password: The password (encrypted Base64). (required) + :param str storage: The document storage. + :param file file: A file to be derypted. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_create_with_http_info(path, file, **kwargs) + return self.put_decrypt_document_with_http_info(out_path, password, **kwargs) else: - (data) = self.put_create_with_http_info(path, file, **kwargs) + (data) = self.put_decrypt_document_with_http_info(out_path, password, **kwargs) return data - def put_create_with_http_info(self, path, file, **kwargs): + def put_decrypt_document_with_http_info(self, out_path, password, **kwargs): """ - Upload a specific file + Decrypt document from content. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_create_with_http_info(path, file, callback=callback_function) + >>> thread = api.put_decrypt_document_with_http_info(out_path, password, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Path where to upload including filename and extension e.g. /file.ext or /Folder 1/file.ext (required) - :param file file: File to upload (required) - :param str version_id: Source file's version - :param str storage: User's storage name + :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) + :param str password: The password (encrypted Base64). (required) + :param str storage: The document storage. + :param file file: A file to be derypted. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['path', 'file', 'version_id', 'storage'] + all_params = ['out_path', 'password', 'storage', 'file'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -24612,16 +26861,16 @@ def put_create_with_http_info(self, path, file, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_create" % key + " to method put_decrypt_document" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'path' is set - if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `put_create`") - # verify the required parameter 'file' is set - if ('file' not in params) or (params['file'] is None): - raise ValueError("Missing the required parameter `file` when calling `put_create`") + # verify the required parameter 'out_path' is set + if ('out_path' not in params) or (params['out_path'] is None): + raise ValueError("Missing the required parameter `out_path` when calling `put_decrypt_document`") + # verify the required parameter 'password' is set + if ('password' not in params) or (params['password'] is None): + raise ValueError("Missing the required parameter `password` when calling `put_decrypt_document`") collection_formats = {} @@ -24629,10 +26878,10 @@ def put_create_with_http_info(self, path, file, **kwargs): path_params = {} query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) - if 'version_id' in params: - query_params.append(('versionId', params['version_id'])) + if 'out_path' in params: + query_params.append(('outPath', params['out_path'])) + if 'password' in params: + query_params.append(('password', params['password'])) if 'storage' in params: query_params.append(('storage', params['storage'])) @@ -24641,7 +26890,7 @@ def put_create_with_http_info(self, path, file, **kwargs): form_params = [] local_var_files = {} if 'file' in params: - local_var_files['File'] = params['file'] + local_var_files['file'] = params['file'] body_params = None # HTTP header `Accept` @@ -24653,9 +26902,9 @@ def put_create_with_http_info(self, path, file, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/file', 'PUT', + return self.api_client.call_api('/pdf/decrypt', 'PUT', path_params, query_params, header_params, @@ -24670,55 +26919,65 @@ def put_create_with_http_info(self, path, file, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_create_document(self, name, **kwargs): + def put_encrypt_document(self, out_path, user_password, owner_password, crypto_algorithm, **kwargs): """ - Create empty document. + Encrypt document from content. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_create_document(name, callback=callback_function) + >>> thread = api.put_encrypt_document(out_path, user_password, owner_password, crypto_algorithm, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The new document name. (required) + :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) + :param str user_password: User password (encrypted Base64). (required) + :param str owner_password: Owner password (encrypted Base64). (required) + :param str crypto_algorithm: Cryptographic algorithm, see CryptoAlgorithm for details. (required) + :param list[PermissionsFlags] permissions_flags: Array of document permissions, see PermissionsFlags for details. + :param bool use_pdf20: Support for revision 6 (Extension 8). :param str storage: The document storage. - :param str folder: The new document folder. - :return: DocumentResponse + :param file file: A file to be encrypted. + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_create_document_with_http_info(name, **kwargs) + return self.put_encrypt_document_with_http_info(out_path, user_password, owner_password, crypto_algorithm, **kwargs) else: - (data) = self.put_create_document_with_http_info(name, **kwargs) + (data) = self.put_encrypt_document_with_http_info(out_path, user_password, owner_password, crypto_algorithm, **kwargs) return data - def put_create_document_with_http_info(self, name, **kwargs): + def put_encrypt_document_with_http_info(self, out_path, user_password, owner_password, crypto_algorithm, **kwargs): """ - Create empty document. + Encrypt document from content. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_create_document_with_http_info(name, callback=callback_function) + >>> thread = api.put_encrypt_document_with_http_info(out_path, user_password, owner_password, crypto_algorithm, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str name: The new document name. (required) + :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) + :param str user_password: User password (encrypted Base64). (required) + :param str owner_password: Owner password (encrypted Base64). (required) + :param str crypto_algorithm: Cryptographic algorithm, see CryptoAlgorithm for details. (required) + :param list[PermissionsFlags] permissions_flags: Array of document permissions, see PermissionsFlags for details. + :param bool use_pdf20: Support for revision 6 (Extension 8). :param str storage: The document storage. - :param str folder: The new document folder. - :return: DocumentResponse + :param file file: A file to be encrypted. + :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'storage', 'folder'] + all_params = ['out_path', 'user_password', 'owner_password', 'crypto_algorithm', 'permissions_flags', 'use_pdf20', 'storage', 'file'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -24729,31 +26988,51 @@ def put_create_document_with_http_info(self, name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_create_document" % key + " to method put_encrypt_document" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'name' is set - if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_create_document`") + # verify the required parameter 'out_path' is set + if ('out_path' not in params) or (params['out_path'] is None): + raise ValueError("Missing the required parameter `out_path` when calling `put_encrypt_document`") + # verify the required parameter 'user_password' is set + if ('user_password' not in params) or (params['user_password'] is None): + raise ValueError("Missing the required parameter `user_password` when calling `put_encrypt_document`") + # verify the required parameter 'owner_password' is set + if ('owner_password' not in params) or (params['owner_password'] is None): + raise ValueError("Missing the required parameter `owner_password` when calling `put_encrypt_document`") + # verify the required parameter 'crypto_algorithm' is set + if ('crypto_algorithm' not in params) or (params['crypto_algorithm'] is None): + raise ValueError("Missing the required parameter `crypto_algorithm` when calling `put_encrypt_document`") collection_formats = {} path_params = {} - if 'name' in params: - path_params['name'] = params['name'] query_params = [] + if 'out_path' in params: + query_params.append(('outPath', params['out_path'])) + if 'user_password' in params: + query_params.append(('userPassword', params['user_password'])) + if 'owner_password' in params: + query_params.append(('ownerPassword', params['owner_password'])) + if 'crypto_algorithm' in params: + query_params.append(('cryptoAlgorithm', params['crypto_algorithm'])) + if 'permissions_flags' in params: + query_params.append(('permissionsFlags', params['permissions_flags'])) + collection_formats['permissionsFlags'] = 'csv' + if 'use_pdf20' in params: + query_params.append(('usePdf20', params['use_pdf20'])) if 'storage' in params: query_params.append(('storage', params['storage'])) - if 'folder' in params: - query_params.append(('folder', params['folder'])) header_params = {} form_params = [] local_var_files = {} + if 'file' in params: + local_var_files['file'] = params['file'] body_params = None # HTTP header `Accept` @@ -24762,19 +27041,19 @@ def put_create_document_with_http_info(self, name, **kwargs): # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['application/json']) + select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}', 'PUT', + return self.api_client.call_api('/pdf/encrypt', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='DocumentResponse', + response_type='AsposeResponse', auth_settings=auth_settings, callback=params.get('callback'), _return_http_data_only=params.get('_return_http_data_only'), @@ -24782,55 +27061,57 @@ def put_create_document_with_http_info(self, name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_create_folder(self, path, **kwargs): + def put_epub_in_storage_to_pdf(self, name, src_path, **kwargs): """ - Create the folder + Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_create_folder(path, callback=callback_function) + >>> thread = api.put_epub_in_storage_to_pdf(name, src_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Target folder's path e.g. Folder1/Folder2/. The folders will be created recursively (required) - :param str storage: User's source storage name - :param str dest_storage: User's destination storage name + :param str name: The document name. (required) + :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str storage: The document storage. + :param str dst_folder: The destination document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_create_folder_with_http_info(path, **kwargs) + return self.put_epub_in_storage_to_pdf_with_http_info(name, src_path, **kwargs) else: - (data) = self.put_create_folder_with_http_info(path, **kwargs) + (data) = self.put_epub_in_storage_to_pdf_with_http_info(name, src_path, **kwargs) return data - def put_create_folder_with_http_info(self, path, **kwargs): + def put_epub_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): """ - Create the folder + Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_create_folder_with_http_info(path, callback=callback_function) + >>> thread = api.put_epub_in_storage_to_pdf_with_http_info(name, src_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str path: Target folder's path e.g. Folder1/Folder2/. The folders will be created recursively (required) - :param str storage: User's source storage name - :param str dest_storage: User's destination storage name + :param str name: The document name. (required) + :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str storage: The document storage. + :param str dst_folder: The destination document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['path', 'storage', 'dest_storage'] + all_params = ['name', 'src_path', 'storage', 'dst_folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -24841,26 +27122,31 @@ def put_create_folder_with_http_info(self, path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_create_folder" % key + " to method put_epub_in_storage_to_pdf" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'path' is set - if ('path' not in params) or (params['path'] is None): - raise ValueError("Missing the required parameter `path` when calling `put_create_folder`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_epub_in_storage_to_pdf`") + # verify the required parameter 'src_path' is set + if ('src_path' not in params) or (params['src_path'] is None): + raise ValueError("Missing the required parameter `src_path` when calling `put_epub_in_storage_to_pdf`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'path' in params: - query_params.append(('path', params['path'])) + if 'src_path' in params: + query_params.append(('srcPath', params['src_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) - if 'dest_storage' in params: - query_params.append(('destStorage', params['dest_storage'])) + if 'dst_folder' in params: + query_params.append(('dstFolder', params['dst_folder'])) header_params = {} @@ -24877,9 +27163,9 @@ def put_create_folder_with_http_info(self, path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/storage/folder', 'PUT', + return self.api_client.call_api('/pdf/{name}/create/epub', 'PUT', path_params, query_params, header_params, @@ -24894,57 +27180,57 @@ def put_create_folder_with_http_info(self, path, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_decrypt_document(self, out_path, password, **kwargs): + def put_export_fields_from_pdf_to_fdf_in_storage(self, name, fdf_output_file_path, **kwargs): """ - Decrypt document from content. + Export fields from from PDF in storage to FDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_decrypt_document(out_path, password, callback=callback_function) + >>> thread = api.put_export_fields_from_pdf_to_fdf_in_storage(name, fdf_output_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) - :param str password: The password (encrypted Base64). (required) + :param str name: The document name. (required) + :param str fdf_output_file_path: The output Fdf file path. (required) :param str storage: The document storage. - :param file file: A file to be derypted. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_decrypt_document_with_http_info(out_path, password, **kwargs) + return self.put_export_fields_from_pdf_to_fdf_in_storage_with_http_info(name, fdf_output_file_path, **kwargs) else: - (data) = self.put_decrypt_document_with_http_info(out_path, password, **kwargs) + (data) = self.put_export_fields_from_pdf_to_fdf_in_storage_with_http_info(name, fdf_output_file_path, **kwargs) return data - def put_decrypt_document_with_http_info(self, out_path, password, **kwargs): + def put_export_fields_from_pdf_to_fdf_in_storage_with_http_info(self, name, fdf_output_file_path, **kwargs): """ - Decrypt document from content. + Export fields from from PDF in storage to FDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_decrypt_document_with_http_info(out_path, password, callback=callback_function) + >>> thread = api.put_export_fields_from_pdf_to_fdf_in_storage_with_http_info(name, fdf_output_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) - :param str password: The password (encrypted Base64). (required) + :param str name: The document name. (required) + :param str fdf_output_file_path: The output Fdf file path. (required) :param str storage: The document storage. - :param file file: A file to be derypted. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['out_path', 'password', 'storage', 'file'] + all_params = ['name', 'fdf_output_file_path', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -24955,36 +27241,36 @@ def put_decrypt_document_with_http_info(self, out_path, password, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_decrypt_document" % key + " to method put_export_fields_from_pdf_to_fdf_in_storage" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'out_path' is set - if ('out_path' not in params) or (params['out_path'] is None): - raise ValueError("Missing the required parameter `out_path` when calling `put_decrypt_document`") - # verify the required parameter 'password' is set - if ('password' not in params) or (params['password'] is None): - raise ValueError("Missing the required parameter `password` when calling `put_decrypt_document`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_export_fields_from_pdf_to_fdf_in_storage`") + # verify the required parameter 'fdf_output_file_path' is set + if ('fdf_output_file_path' not in params) or (params['fdf_output_file_path'] is None): + raise ValueError("Missing the required parameter `fdf_output_file_path` when calling `put_export_fields_from_pdf_to_fdf_in_storage`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'out_path' in params: - query_params.append(('outPath', params['out_path'])) - if 'password' in params: - query_params.append(('password', params['password'])) + if 'fdf_output_file_path' in params: + query_params.append(('fdfOutputFilePath', params['fdf_output_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} form_params = [] local_var_files = {} - if 'file' in params: - local_var_files['file'] = params['file'] body_params = None # HTTP header `Accept` @@ -24993,12 +27279,12 @@ def put_decrypt_document_with_http_info(self, out_path, password, **kwargs): # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['multipart/form-data']) + select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/decrypt', 'PUT', + return self.api_client.call_api('/pdf/{name}/export/fdf', 'PUT', path_params, query_params, header_params, @@ -25013,65 +27299,57 @@ def put_decrypt_document_with_http_info(self, out_path, password, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_encrypt_document(self, out_path, user_password, owner_password, crypto_algorithm, **kwargs): + def put_export_fields_from_pdf_to_xfdf_in_storage(self, name, xfdf_output_file_path, **kwargs): """ - Encrypt document from content. + Export fields from from PDF in storage to XFDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_encrypt_document(out_path, user_password, owner_password, crypto_algorithm, callback=callback_function) + >>> thread = api.put_export_fields_from_pdf_to_xfdf_in_storage(name, xfdf_output_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) - :param str user_password: User password (encrypted Base64). (required) - :param str owner_password: Owner password (encrypted Base64). (required) - :param str crypto_algorithm: Cryptographic algorithm, see for details. (required) - :param list[PermissionsFlags] permissions_flags: Array of document permissions, see for details. - :param bool use_pdf20: Support for revision 6 (Extension 8). + :param str name: The document name. (required) + :param str xfdf_output_file_path: The output xfdf file path. (required) :param str storage: The document storage. - :param file file: A file to be encrypted. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_encrypt_document_with_http_info(out_path, user_password, owner_password, crypto_algorithm, **kwargs) + return self.put_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(name, xfdf_output_file_path, **kwargs) else: - (data) = self.put_encrypt_document_with_http_info(out_path, user_password, owner_password, crypto_algorithm, **kwargs) + (data) = self.put_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(name, xfdf_output_file_path, **kwargs) return data - def put_encrypt_document_with_http_info(self, out_path, user_password, owner_password, crypto_algorithm, **kwargs): + def put_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(self, name, xfdf_output_file_path, **kwargs): """ - Encrypt document from content. + Export fields from from PDF in storage to XFDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_encrypt_document_with_http_info(out_path, user_password, owner_password, crypto_algorithm, callback=callback_function) + >>> thread = api.put_export_fields_from_pdf_to_xfdf_in_storage_with_http_info(name, xfdf_output_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) - :param str out_path: Full resulting filename (ex. /folder1/folder2/result.doc) (required) - :param str user_password: User password (encrypted Base64). (required) - :param str owner_password: Owner password (encrypted Base64). (required) - :param str crypto_algorithm: Cryptographic algorithm, see for details. (required) - :param list[PermissionsFlags] permissions_flags: Array of document permissions, see for details. - :param bool use_pdf20: Support for revision 6 (Extension 8). + :param str name: The document name. (required) + :param str xfdf_output_file_path: The output xfdf file path. (required) :param str storage: The document storage. - :param file file: A file to be encrypted. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['out_path', 'user_password', 'owner_password', 'crypto_algorithm', 'permissions_flags', 'use_pdf20', 'storage', 'file'] + all_params = ['name', 'xfdf_output_file_path', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -25082,51 +27360,36 @@ def put_encrypt_document_with_http_info(self, out_path, user_password, owner_pas if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_encrypt_document" % key + " to method put_export_fields_from_pdf_to_xfdf_in_storage" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'out_path' is set - if ('out_path' not in params) or (params['out_path'] is None): - raise ValueError("Missing the required parameter `out_path` when calling `put_encrypt_document`") - # verify the required parameter 'user_password' is set - if ('user_password' not in params) or (params['user_password'] is None): - raise ValueError("Missing the required parameter `user_password` when calling `put_encrypt_document`") - # verify the required parameter 'owner_password' is set - if ('owner_password' not in params) or (params['owner_password'] is None): - raise ValueError("Missing the required parameter `owner_password` when calling `put_encrypt_document`") - # verify the required parameter 'crypto_algorithm' is set - if ('crypto_algorithm' not in params) or (params['crypto_algorithm'] is None): - raise ValueError("Missing the required parameter `crypto_algorithm` when calling `put_encrypt_document`") + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_export_fields_from_pdf_to_xfdf_in_storage`") + # verify the required parameter 'xfdf_output_file_path' is set + if ('xfdf_output_file_path' not in params) or (params['xfdf_output_file_path'] is None): + raise ValueError("Missing the required parameter `xfdf_output_file_path` when calling `put_export_fields_from_pdf_to_xfdf_in_storage`") collection_formats = {} path_params = {} + if 'name' in params: + path_params['name'] = params['name'] query_params = [] - if 'out_path' in params: - query_params.append(('outPath', params['out_path'])) - if 'user_password' in params: - query_params.append(('userPassword', params['user_password'])) - if 'owner_password' in params: - query_params.append(('ownerPassword', params['owner_password'])) - if 'crypto_algorithm' in params: - query_params.append(('cryptoAlgorithm', params['crypto_algorithm'])) - if 'permissions_flags' in params: - query_params.append(('permissionsFlags', params['permissions_flags'])) - collection_formats['permissionsFlags'] = 'multi' - if 'use_pdf20' in params: - query_params.append(('usePdf20', params['use_pdf20'])) + if 'xfdf_output_file_path' in params: + query_params.append(('xfdfOutputFilePath', params['xfdf_output_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} form_params = [] local_var_files = {} - if 'file' in params: - local_var_files['file'] = params['file'] body_params = None # HTTP header `Accept` @@ -25135,12 +27398,12 @@ def put_encrypt_document_with_http_info(self, out_path, user_password, owner_pas # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.\ - select_header_content_type(['multipart/form-data']) + select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/encrypt', 'PUT', + return self.api_client.call_api('/pdf/{name}/export/xfdf', 'PUT', path_params, query_params, header_params, @@ -25155,57 +27418,57 @@ def put_encrypt_document_with_http_info(self, out_path, user_password, owner_pas _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_epub_in_storage_to_pdf(self, name, src_path, **kwargs): + def put_export_fields_from_pdf_to_xml_in_storage(self, name, xml_output_file_path, **kwargs): """ - Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. + Export fields from from PDF in storage to XML file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_epub_in_storage_to_pdf(name, src_path, callback=callback_function) + >>> thread = api.put_export_fields_from_pdf_to_xml_in_storage(name, xml_output_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str xml_output_file_path: The output xml file path. (required) :param str storage: The document storage. - :param str dst_folder: The destination document folder. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_epub_in_storage_to_pdf_with_http_info(name, src_path, **kwargs) + return self.put_export_fields_from_pdf_to_xml_in_storage_with_http_info(name, xml_output_file_path, **kwargs) else: - (data) = self.put_epub_in_storage_to_pdf_with_http_info(name, src_path, **kwargs) + (data) = self.put_export_fields_from_pdf_to_xml_in_storage_with_http_info(name, xml_output_file_path, **kwargs) return data - def put_epub_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): + def put_export_fields_from_pdf_to_xml_in_storage_with_http_info(self, name, xml_output_file_path, **kwargs): """ - Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. + Export fields from from PDF in storage to XML file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_epub_in_storage_to_pdf_with_http_info(name, src_path, callback=callback_function) + >>> thread = api.put_export_fields_from_pdf_to_xml_in_storage_with_http_info(name, xml_output_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str src_path: Full source filename (ex. /folder1/folder2/template.epub) (required) + :param str xml_output_file_path: The output xml file path. (required) :param str storage: The document storage. - :param str dst_folder: The destination document folder. + :param str folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'src_path', 'storage', 'dst_folder'] + all_params = ['name', 'xml_output_file_path', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -25216,16 +27479,16 @@ def put_epub_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_epub_in_storage_to_pdf" % key + " to method put_export_fields_from_pdf_to_xml_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_epub_in_storage_to_pdf`") - # verify the required parameter 'src_path' is set - if ('src_path' not in params) or (params['src_path'] is None): - raise ValueError("Missing the required parameter `src_path` when calling `put_epub_in_storage_to_pdf`") + raise ValueError("Missing the required parameter `name` when calling `put_export_fields_from_pdf_to_xml_in_storage`") + # verify the required parameter 'xml_output_file_path' is set + if ('xml_output_file_path' not in params) or (params['xml_output_file_path'] is None): + raise ValueError("Missing the required parameter `xml_output_file_path` when calling `put_export_fields_from_pdf_to_xml_in_storage`") collection_formats = {} @@ -25235,12 +27498,12 @@ def put_epub_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): path_params['name'] = params['name'] query_params = [] - if 'src_path' in params: - query_params.append(('srcPath', params['src_path'])) + if 'xml_output_file_path' in params: + query_params.append(('xmlOutputFilePath', params['xml_output_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) - if 'dst_folder' in params: - query_params.append(('dstFolder', params['dst_folder'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) header_params = {} @@ -25257,9 +27520,9 @@ def put_epub_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/create/epub', 'PUT', + return self.api_client.call_api('/pdf/{name}/export/xml', 'PUT', path_params, query_params, header_params, @@ -25369,7 +27632,7 @@ def put_fields_flatten_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/fields/flatten', 'PUT', path_params, @@ -25495,7 +27758,7 @@ def put_file_attachment_annotation_with_http_info(self, name, annotation_id, ann select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/fileattachment/{annotationId}', 'PUT', path_params, @@ -25618,7 +27881,7 @@ def put_file_attachment_annotation_data_extract_with_http_info(self, name, annot select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/fileattachment/{annotationId}/data/extract', 'PUT', path_params, @@ -25744,7 +28007,7 @@ def put_free_text_annotation_with_http_info(self, name, annotation_id, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/freetext/{annotationId}', 'PUT', path_params, @@ -25870,7 +28133,7 @@ def put_highlight_annotation_with_http_info(self, name, annotation_id, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/highlight/{annotationId}', 'PUT', path_params, @@ -26021,7 +28284,7 @@ def put_html_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/html', 'PUT', path_params, @@ -26152,9 +28415,271 @@ def put_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/gif', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AsposeResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def put_image_extract_as_jpeg(self, name, image_id, **kwargs): + """ + Extract document image in JPEG format to folder + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_image_extract_as_jpeg(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :param str dest_folder: The document folder. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.put_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + else: + (data) = self.put_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + return data + + def put_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): + """ + Extract document image in JPEG format to folder + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_image_extract_as_jpeg_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :param str dest_folder: The document folder. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method put_image_extract_as_jpeg" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_image_extract_as_jpeg`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `put_image_extract_as_jpeg`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + if 'dest_folder' in params: + query_params.append(('destFolder', params['dest_folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/jpeg', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AsposeResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def put_image_extract_as_png(self, name, image_id, **kwargs): + """ + Extract document image in PNG format to folder + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_image_extract_as_png(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :param str dest_folder: The document folder. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.put_image_extract_as_png_with_http_info(name, image_id, **kwargs) + else: + (data) = self.put_image_extract_as_png_with_http_info(name, image_id, **kwargs) + return data + + def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): + """ + Extract document image in PNG format to folder + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_image_extract_as_png_with_http_info(name, image_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param str image_id: Image ID. (required) + :param int width: The converted image width. + :param int height: The converted image height. + :param str storage: The document storage. + :param str folder: The document folder. + :param str dest_folder: The document folder. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method put_image_extract_as_png" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_image_extract_as_png`") + # verify the required parameter 'image_id' is set + if ('image_id' not in params) or (params['image_id'] is None): + raise ValueError("Missing the required parameter `image_id` when calling `put_image_extract_as_png`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + if 'image_id' in params: + path_params['imageId'] = params['image_id'] + + query_params = [] + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + if 'dest_folder' in params: + query_params.append(('destFolder', params['dest_folder'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/gif', 'PUT', + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/png', 'PUT', path_params, query_params, header_params, @@ -26169,16 +28694,16 @@ def put_image_extract_as_gif_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_image_extract_as_jpeg(self, name, image_id, **kwargs): + def put_image_extract_as_tiff(self, name, image_id, **kwargs): """ - Extract document image in JPEG format to folder + Extract document image in TIFF format to folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_extract_as_jpeg(name, image_id, callback=callback_function) + >>> thread = api.put_image_extract_as_tiff(name, image_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) @@ -26195,21 +28720,21 @@ def put_image_extract_as_jpeg(self, name, image_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + return self.put_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) else: - (data) = self.put_image_extract_as_jpeg_with_http_info(name, image_id, **kwargs) + (data) = self.put_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) return data - def put_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): + def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): """ - Extract document image in JPEG format to folder + Extract document image in TIFF format to folder This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_extract_as_jpeg_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.put_image_extract_as_tiff_with_http_info(name, image_id, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) @@ -26236,16 +28761,16 @@ def put_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_image_extract_as_jpeg" % key + " to method put_image_extract_as_tiff" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_image_extract_as_jpeg`") + raise ValueError("Missing the required parameter `name` when calling `put_image_extract_as_tiff`") # verify the required parameter 'image_id' is set if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `put_image_extract_as_jpeg`") + raise ValueError("Missing the required parameter `image_id` when calling `put_image_extract_as_tiff`") collection_formats = {} @@ -26283,9 +28808,9 @@ def put_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/jpeg', 'PUT', + return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/tiff', 'PUT', path_params, query_params, header_params, @@ -26300,21 +28825,140 @@ def put_image_extract_as_jpeg_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_image_extract_as_png(self, name, image_id, **kwargs): + def put_image_in_storage_to_pdf(self, name, image_templates, **kwargs): """ - Extract document image in PNG format to folder + Convert image file (located on storage) to PDF format and upload resulting file to storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_extract_as_png(name, image_id, callback=callback_function) + >>> thread = api.put_image_in_storage_to_pdf(name, image_templates, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) + :param ImageTemplatesRequest image_templates: ImageTemplatesRequestImage templates (required) + :param str dst_folder: The destination document folder. + :param str storage: The document storage. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.put_image_in_storage_to_pdf_with_http_info(name, image_templates, **kwargs) + else: + (data) = self.put_image_in_storage_to_pdf_with_http_info(name, image_templates, **kwargs) + return data + + def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kwargs): + """ + Convert image file (located on storage) to PDF format and upload resulting file to storage. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_image_in_storage_to_pdf_with_http_info(name, image_templates, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param ImageTemplatesRequest image_templates: ImageTemplatesRequestImage templates (required) + :param str dst_folder: The destination document folder. + :param str storage: The document storage. + :return: AsposeResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['name', 'image_templates', 'dst_folder', 'storage'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method put_image_in_storage_to_pdf" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'name' is set + if ('name' not in params) or (params['name'] is None): + raise ValueError("Missing the required parameter `name` when calling `put_image_in_storage_to_pdf`") + # verify the required parameter 'image_templates' is set + if ('image_templates' not in params) or (params['image_templates'] is None): + raise ValueError("Missing the required parameter `image_templates` when calling `put_image_in_storage_to_pdf`") + + + collection_formats = {} + + path_params = {} + if 'name' in params: + path_params['name'] = params['name'] + + query_params = [] + if 'dst_folder' in params: + query_params.append(('dstFolder', params['dst_folder'])) + if 'storage' in params: + query_params.append(('storage', params['storage'])) + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'image_templates' in params: + body_params = params['image_templates'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/{name}/create/images', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AsposeResponse', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def put_images_extract_as_gif(self, name, page_number, **kwargs): + """ + Extract document images in GIF format to folder. + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.put_images_extract_as_gif(name, page_number, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str name: The document name. (required) + :param int page_number: The page number. (required) :param int width: The converted image width. :param int height: The converted image height. :param str storage: The document storage. @@ -26326,26 +28970,26 @@ def put_image_extract_as_png(self, name, image_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_image_extract_as_png_with_http_info(name, image_id, **kwargs) + return self.put_images_extract_as_gif_with_http_info(name, page_number, **kwargs) else: - (data) = self.put_image_extract_as_png_with_http_info(name, image_id, **kwargs) + (data) = self.put_images_extract_as_gif_with_http_info(name, page_number, **kwargs) return data - def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): + def put_images_extract_as_gif_with_http_info(self, name, page_number, **kwargs): """ - Extract document image in PNG format to folder + Extract document images in GIF format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_extract_as_png_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.put_images_extract_as_gif_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) + :param int page_number: The page number. (required) :param int width: The converted image width. :param int height: The converted image height. :param str storage: The document storage. @@ -26356,7 +29000,7 @@ def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): returns the request thread. """ - all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params = ['name', 'page_number', 'width', 'height', 'storage', 'folder', 'dest_folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -26367,16 +29011,16 @@ def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_image_extract_as_png" % key + " to method put_images_extract_as_gif" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_image_extract_as_png`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `put_image_extract_as_png`") + raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_gif`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_gif`") collection_formats = {} @@ -26384,8 +29028,8 @@ def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'width' in params: @@ -26414,9 +29058,9 @@ def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/png', 'PUT', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/gif', 'PUT', path_params, query_params, header_params, @@ -26431,21 +29075,21 @@ def put_image_extract_as_png_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_image_extract_as_tiff(self, name, image_id, **kwargs): + def put_images_extract_as_jpeg(self, name, page_number, **kwargs): """ - Extract document image in TIFF format to folder + Extract document images in JPEG format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_extract_as_tiff(name, image_id, callback=callback_function) + >>> thread = api.put_images_extract_as_jpeg(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) + :param int page_number: The page number. (required) :param int width: The converted image width. :param int height: The converted image height. :param str storage: The document storage. @@ -26457,26 +29101,26 @@ def put_image_extract_as_tiff(self, name, image_id, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) + return self.put_images_extract_as_jpeg_with_http_info(name, page_number, **kwargs) else: - (data) = self.put_image_extract_as_tiff_with_http_info(name, image_id, **kwargs) + (data) = self.put_images_extract_as_jpeg_with_http_info(name, page_number, **kwargs) return data - def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): + def put_images_extract_as_jpeg_with_http_info(self, name, page_number, **kwargs): """ - Extract document image in TIFF format to folder + Extract document images in JPEG format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_extract_as_tiff_with_http_info(name, image_id, callback=callback_function) + >>> thread = api.put_images_extract_as_jpeg_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param str image_id: Image ID. (required) + :param int page_number: The page number. (required) :param int width: The converted image width. :param int height: The converted image height. :param str storage: The document storage. @@ -26487,7 +29131,7 @@ def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): returns the request thread. """ - all_params = ['name', 'image_id', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params = ['name', 'page_number', 'width', 'height', 'storage', 'folder', 'dest_folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -26498,16 +29142,16 @@ def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_image_extract_as_tiff" % key + " to method put_images_extract_as_jpeg" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_image_extract_as_tiff`") - # verify the required parameter 'image_id' is set - if ('image_id' not in params) or (params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `put_image_extract_as_tiff`") + raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_jpeg`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_jpeg`") collection_formats = {} @@ -26515,8 +29159,8 @@ def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'image_id' in params: - path_params['imageId'] = params['image_id'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] if 'width' in params: @@ -26545,9 +29189,9 @@ def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/images/{imageId}/extract/tiff', 'PUT', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/jpeg', 'PUT', path_params, query_params, header_params, @@ -26562,57 +29206,63 @@ def put_image_extract_as_tiff_with_http_info(self, name, image_id, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_image_in_storage_to_pdf(self, name, image_templates, **kwargs): + def put_images_extract_as_png(self, name, page_number, **kwargs): """ - Convert image file (located on storage) to PDF format and upload resulting file to storage. + Extract document images in PNG format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_in_storage_to_pdf(name, image_templates, callback=callback_function) + >>> thread = api.put_images_extract_as_png(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param ImageTemplatesRequest image_templates: Image templates (required) - :param str dst_folder: The destination document folder. + :param int page_number: The page number. (required) + :param int width: The converted image width. + :param int height: The converted image height. :param str storage: The document storage. + :param str folder: The document folder. + :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_image_in_storage_to_pdf_with_http_info(name, image_templates, **kwargs) + return self.put_images_extract_as_png_with_http_info(name, page_number, **kwargs) else: - (data) = self.put_image_in_storage_to_pdf_with_http_info(name, image_templates, **kwargs) + (data) = self.put_images_extract_as_png_with_http_info(name, page_number, **kwargs) return data - def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kwargs): + def put_images_extract_as_png_with_http_info(self, name, page_number, **kwargs): """ - Convert image file (located on storage) to PDF format and upload resulting file to storage. + Extract document images in PNG format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_image_in_storage_to_pdf_with_http_info(name, image_templates, callback=callback_function) + >>> thread = api.put_images_extract_as_png_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param ImageTemplatesRequest image_templates: Image templates (required) - :param str dst_folder: The destination document folder. + :param int page_number: The page number. (required) + :param int width: The converted image width. + :param int height: The converted image height. :param str storage: The document storage. + :param str folder: The document folder. + :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'image_templates', 'dst_folder', 'storage'] + all_params = ['name', 'page_number', 'width', 'height', 'storage', 'folder', 'dest_folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -26623,16 +29273,16 @@ def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kw if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_image_in_storage_to_pdf" % key + " to method put_images_extract_as_png" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_image_in_storage_to_pdf`") - # verify the required parameter 'image_templates' is set - if ('image_templates' not in params) or (params['image_templates'] is None): - raise ValueError("Missing the required parameter `image_templates` when calling `put_image_in_storage_to_pdf`") + raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_png`") + # verify the required parameter 'page_number' is set + if ('page_number' not in params) or (params['page_number'] is None): + raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_png`") collection_formats = {} @@ -26640,12 +29290,20 @@ def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kw path_params = {} if 'name' in params: path_params['name'] = params['name'] + if 'page_number' in params: + path_params['pageNumber'] = params['page_number'] query_params = [] - if 'dst_folder' in params: - query_params.append(('dstFolder', params['dst_folder'])) + if 'width' in params: + query_params.append(('width', params['width'])) + if 'height' in params: + query_params.append(('height', params['height'])) if 'storage' in params: query_params.append(('storage', params['storage'])) + if 'folder' in params: + query_params.append(('folder', params['folder'])) + if 'dest_folder' in params: + query_params.append(('destFolder', params['dest_folder'])) header_params = {} @@ -26653,8 +29311,6 @@ def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kw local_var_files = {} body_params = None - if 'image_templates' in params: - body_params = params['image_templates'] # HTTP header `Accept` header_params['Accept'] = self.api_client.\ select_header_accept(['application/json']) @@ -26664,9 +29320,9 @@ def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kw select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/create/images', 'PUT', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/png', 'PUT', path_params, query_params, header_params, @@ -26681,16 +29337,16 @@ def put_image_in_storage_to_pdf_with_http_info(self, name, image_templates, **kw _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_images_extract_as_gif(self, name, page_number, **kwargs): + def put_images_extract_as_tiff(self, name, page_number, **kwargs): """ - Extract document images in GIF format to folder. + Extract document images in TIFF format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_gif(name, page_number, callback=callback_function) + >>> thread = api.put_images_extract_as_tiff(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) @@ -26707,21 +29363,21 @@ def put_images_extract_as_gif(self, name, page_number, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_images_extract_as_gif_with_http_info(name, page_number, **kwargs) + return self.put_images_extract_as_tiff_with_http_info(name, page_number, **kwargs) else: - (data) = self.put_images_extract_as_gif_with_http_info(name, page_number, **kwargs) + (data) = self.put_images_extract_as_tiff_with_http_info(name, page_number, **kwargs) return data - def put_images_extract_as_gif_with_http_info(self, name, page_number, **kwargs): + def put_images_extract_as_tiff_with_http_info(self, name, page_number, **kwargs): """ - Extract document images in GIF format to folder. + Extract document images in TIFF format to folder. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_gif_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.put_images_extract_as_tiff_with_http_info(name, page_number, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) @@ -26748,16 +29404,16 @@ def put_images_extract_as_gif_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_images_extract_as_gif" % key + " to method put_images_extract_as_tiff" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_gif`") + raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_tiff`") # verify the required parameter 'page_number' is set if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_gif`") + raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_tiff`") collection_formats = {} @@ -26795,9 +29451,9 @@ def put_images_extract_as_gif_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/gif', 'PUT', + return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/tiff', 'PUT', path_params, query_params, header_params, @@ -26812,63 +29468,57 @@ def put_images_extract_as_gif_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_images_extract_as_jpeg(self, name, page_number, **kwargs): + def put_import_fields_from_fdf_in_storage(self, name, fdf_file_path, **kwargs): """ - Extract document images in JPEG format to folder. + Update fields from FDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_jpeg(name, page_number, callback=callback_function) + >>> thread = api.put_import_fields_from_fdf_in_storage(name, fdf_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param int width: The converted image width. - :param int height: The converted image height. - :param str storage: + :param str fdf_file_path: The Fdf file path. (required) + :param str storage: The document storage. :param str folder: The document folder. - :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_images_extract_as_jpeg_with_http_info(name, page_number, **kwargs) + return self.put_import_fields_from_fdf_in_storage_with_http_info(name, fdf_file_path, **kwargs) else: - (data) = self.put_images_extract_as_jpeg_with_http_info(name, page_number, **kwargs) + (data) = self.put_import_fields_from_fdf_in_storage_with_http_info(name, fdf_file_path, **kwargs) return data - def put_images_extract_as_jpeg_with_http_info(self, name, page_number, **kwargs): + def put_import_fields_from_fdf_in_storage_with_http_info(self, name, fdf_file_path, **kwargs): """ - Extract document images in JPEG format to folder. + Update fields from FDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_jpeg_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.put_import_fields_from_fdf_in_storage_with_http_info(name, fdf_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param int width: The converted image width. - :param int height: The converted image height. - :param str storage: + :param str fdf_file_path: The Fdf file path. (required) + :param str storage: The document storage. :param str folder: The document folder. - :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params = ['name', 'fdf_file_path', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -26879,16 +29529,16 @@ def put_images_extract_as_jpeg_with_http_info(self, name, page_number, **kwargs) if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_images_extract_as_jpeg" % key + " to method put_import_fields_from_fdf_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_jpeg`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_jpeg`") + raise ValueError("Missing the required parameter `name` when calling `put_import_fields_from_fdf_in_storage`") + # verify the required parameter 'fdf_file_path' is set + if ('fdf_file_path' not in params) or (params['fdf_file_path'] is None): + raise ValueError("Missing the required parameter `fdf_file_path` when calling `put_import_fields_from_fdf_in_storage`") collection_formats = {} @@ -26896,20 +29546,14 @@ def put_images_extract_as_jpeg_with_http_info(self, name, page_number, **kwargs) path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) + if 'fdf_file_path' in params: + query_params.append(('fdfFilePath', params['fdf_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: query_params.append(('folder', params['folder'])) - if 'dest_folder' in params: - query_params.append(('destFolder', params['dest_folder'])) header_params = {} @@ -26926,9 +29570,9 @@ def put_images_extract_as_jpeg_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/jpeg', 'PUT', + return self.api_client.call_api('/pdf/{name}/import/fdf', 'PUT', path_params, query_params, header_params, @@ -26943,63 +29587,57 @@ def put_images_extract_as_jpeg_with_http_info(self, name, page_number, **kwargs) _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_images_extract_as_png(self, name, page_number, **kwargs): + def put_import_fields_from_xfdf_in_storage(self, name, xfdf_file_path, **kwargs): """ - Extract document images in PNG format to folder. + Update fields from XFDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_png(name, page_number, callback=callback_function) + >>> thread = api.put_import_fields_from_xfdf_in_storage(name, xfdf_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param int width: The converted image width. - :param int height: The converted image height. + :param str xfdf_file_path: The XFDF file path. (required) :param str storage: The document storage. :param str folder: The document folder. - :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_images_extract_as_png_with_http_info(name, page_number, **kwargs) + return self.put_import_fields_from_xfdf_in_storage_with_http_info(name, xfdf_file_path, **kwargs) else: - (data) = self.put_images_extract_as_png_with_http_info(name, page_number, **kwargs) + (data) = self.put_import_fields_from_xfdf_in_storage_with_http_info(name, xfdf_file_path, **kwargs) return data - def put_images_extract_as_png_with_http_info(self, name, page_number, **kwargs): + def put_import_fields_from_xfdf_in_storage_with_http_info(self, name, xfdf_file_path, **kwargs): """ - Extract document images in PNG format to folder. + Update fields from XFDF file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_png_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.put_import_fields_from_xfdf_in_storage_with_http_info(name, xfdf_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param int width: The converted image width. - :param int height: The converted image height. + :param str xfdf_file_path: The XFDF file path. (required) :param str storage: The document storage. :param str folder: The document folder. - :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params = ['name', 'xfdf_file_path', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -27010,16 +29648,16 @@ def put_images_extract_as_png_with_http_info(self, name, page_number, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_images_extract_as_png" % key + " to method put_import_fields_from_xfdf_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_png`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_png`") + raise ValueError("Missing the required parameter `name` when calling `put_import_fields_from_xfdf_in_storage`") + # verify the required parameter 'xfdf_file_path' is set + if ('xfdf_file_path' not in params) or (params['xfdf_file_path'] is None): + raise ValueError("Missing the required parameter `xfdf_file_path` when calling `put_import_fields_from_xfdf_in_storage`") collection_formats = {} @@ -27027,20 +29665,14 @@ def put_images_extract_as_png_with_http_info(self, name, page_number, **kwargs): path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) + if 'xfdf_file_path' in params: + query_params.append(('xfdfFilePath', params['xfdf_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: query_params.append(('folder', params['folder'])) - if 'dest_folder' in params: - query_params.append(('destFolder', params['dest_folder'])) header_params = {} @@ -27057,9 +29689,9 @@ def put_images_extract_as_png_with_http_info(self, name, page_number, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/png', 'PUT', + return self.api_client.call_api('/pdf/{name}/import/xfdf', 'PUT', path_params, query_params, header_params, @@ -27074,63 +29706,57 @@ def put_images_extract_as_png_with_http_info(self, name, page_number, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_images_extract_as_tiff(self, name, page_number, **kwargs): + def put_import_fields_from_xml_in_storage(self, name, xml_file_path, **kwargs): """ - Extract document images in TIFF format to folder. + Update fields from XML file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_tiff(name, page_number, callback=callback_function) + >>> thread = api.put_import_fields_from_xml_in_storage(name, xml_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param int width: The converted image width. - :param int height: The converted image height. + :param str xml_file_path: Full source filename (ex. /folder1/folder2/template.xml) (required) :param str storage: The document storage. :param str folder: The document folder. - :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_images_extract_as_tiff_with_http_info(name, page_number, **kwargs) + return self.put_import_fields_from_xml_in_storage_with_http_info(name, xml_file_path, **kwargs) else: - (data) = self.put_images_extract_as_tiff_with_http_info(name, page_number, **kwargs) + (data) = self.put_import_fields_from_xml_in_storage_with_http_info(name, xml_file_path, **kwargs) return data - def put_images_extract_as_tiff_with_http_info(self, name, page_number, **kwargs): + def put_import_fields_from_xml_in_storage_with_http_info(self, name, xml_file_path, **kwargs): """ - Extract document images in TIFF format to folder. + Update fields from XML file in storage. This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please define a `callback` function to be invoked when receiving the response. >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_images_extract_as_tiff_with_http_info(name, page_number, callback=callback_function) + >>> thread = api.put_import_fields_from_xml_in_storage_with_http_info(name, xml_file_path, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param int page_number: The page number. (required) - :param int width: The converted image width. - :param int height: The converted image height. + :param str xml_file_path: Full source filename (ex. /folder1/folder2/template.xml) (required) :param str storage: The document storage. :param str folder: The document folder. - :param str dest_folder: The document folder. :return: AsposeResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['name', 'page_number', 'width', 'height', 'storage', 'folder', 'dest_folder'] + all_params = ['name', 'xml_file_path', 'storage', 'folder'] all_params.append('callback') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -27141,16 +29767,16 @@ def put_images_extract_as_tiff_with_http_info(self, name, page_number, **kwargs) if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method put_images_extract_as_tiff" % key + " to method put_import_fields_from_xml_in_storage" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): - raise ValueError("Missing the required parameter `name` when calling `put_images_extract_as_tiff`") - # verify the required parameter 'page_number' is set - if ('page_number' not in params) or (params['page_number'] is None): - raise ValueError("Missing the required parameter `page_number` when calling `put_images_extract_as_tiff`") + raise ValueError("Missing the required parameter `name` when calling `put_import_fields_from_xml_in_storage`") + # verify the required parameter 'xml_file_path' is set + if ('xml_file_path' not in params) or (params['xml_file_path'] is None): + raise ValueError("Missing the required parameter `xml_file_path` when calling `put_import_fields_from_xml_in_storage`") collection_formats = {} @@ -27158,20 +29784,14 @@ def put_images_extract_as_tiff_with_http_info(self, name, page_number, **kwargs) path_params = {} if 'name' in params: path_params['name'] = params['name'] - if 'page_number' in params: - path_params['pageNumber'] = params['page_number'] query_params = [] - if 'width' in params: - query_params.append(('width', params['width'])) - if 'height' in params: - query_params.append(('height', params['height'])) + if 'xml_file_path' in params: + query_params.append(('xmlFilePath', params['xml_file_path'])) if 'storage' in params: query_params.append(('storage', params['storage'])) if 'folder' in params: query_params.append(('folder', params['folder'])) - if 'dest_folder' in params: - query_params.append(('destFolder', params['dest_folder'])) header_params = {} @@ -27188,9 +29808,9 @@ def put_images_extract_as_tiff_with_http_info(self, name, page_number, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] - return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/images/extract/tiff', 'PUT', + return self.api_client.call_api('/pdf/{name}/import/xml', 'PUT', path_params, query_params, header_params, @@ -27314,7 +29934,7 @@ def put_ink_annotation_with_http_info(self, name, annotation_id, annotation, **k select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/ink/{annotationId}', 'PUT', path_params, @@ -27433,7 +30053,7 @@ def put_la_te_x_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/latex', 'PUT', path_params, @@ -27559,7 +30179,7 @@ def put_line_annotation_with_http_info(self, name, annotation_id, annotation, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/line/{annotationId}', 'PUT', path_params, @@ -27685,7 +30305,7 @@ def put_link_annotation_with_http_info(self, name, link_id, link, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/links/{linkId}', 'PUT', path_params, @@ -27702,7 +30322,7 @@ def put_link_annotation_with_http_info(self, name, link_id, link, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_merge_documents(self, name, **kwargs): + def put_merge_documents(self, name, merge_documents, **kwargs): """ Merge a list of documents. This method makes a synchronous HTTP request by default. To make an @@ -27711,12 +30331,12 @@ def put_merge_documents(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_merge_documents(name, callback=callback_function) + >>> thread = api.put_merge_documents(name, merge_documents, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: Resulting documen name. (required) - :param MergeDocuments merge_documents: with a list of documents. + :param MergeDocuments merge_documents: MergeDocuments with a list of documents. (required) :param str storage: Resulting document storage. :param str folder: Resulting document folder. :return: DocumentResponse @@ -27725,12 +30345,12 @@ def put_merge_documents(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_merge_documents_with_http_info(name, **kwargs) + return self.put_merge_documents_with_http_info(name, merge_documents, **kwargs) else: - (data) = self.put_merge_documents_with_http_info(name, **kwargs) + (data) = self.put_merge_documents_with_http_info(name, merge_documents, **kwargs) return data - def put_merge_documents_with_http_info(self, name, **kwargs): + def put_merge_documents_with_http_info(self, name, merge_documents, **kwargs): """ Merge a list of documents. This method makes a synchronous HTTP request by default. To make an @@ -27739,12 +30359,12 @@ def put_merge_documents_with_http_info(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_merge_documents_with_http_info(name, callback=callback_function) + >>> thread = api.put_merge_documents_with_http_info(name, merge_documents, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: Resulting documen name. (required) - :param MergeDocuments merge_documents: with a list of documents. + :param MergeDocuments merge_documents: MergeDocuments with a list of documents. (required) :param str storage: Resulting document storage. :param str folder: Resulting document folder. :return: DocumentResponse @@ -27770,6 +30390,9 @@ def put_merge_documents_with_http_info(self, name, **kwargs): # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): raise ValueError("Missing the required parameter `name` when calling `put_merge_documents`") + # verify the required parameter 'merge_documents' is set + if ('merge_documents' not in params) or (params['merge_documents'] is None): + raise ValueError("Missing the required parameter `merge_documents` when calling `put_merge_documents`") collection_formats = {} @@ -27801,7 +30424,7 @@ def put_merge_documents_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/merge', 'PUT', path_params, @@ -27920,7 +30543,7 @@ def put_mht_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/mht', 'PUT', path_params, @@ -28046,7 +30669,7 @@ def put_movie_annotation_with_http_info(self, name, annotation_id, annotation, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/movie/{annotationId}', 'PUT', path_params, @@ -28078,7 +30701,7 @@ def put_page_add_stamp(self, name, page_number, stamp, **kwargs): for asynchronous request. (optional) :param str name: The document name. (required) :param int page_number: The page number. (required) - :param Stamp stamp: with data. (required) + :param Stamp stamp: Stamp with data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -28107,7 +30730,7 @@ def put_page_add_stamp_with_http_info(self, name, page_number, stamp, **kwargs): for asynchronous request. (optional) :param str name: The document name. (required) :param int page_number: The page number. (required) - :param Stamp stamp: with data. (required) + :param Stamp stamp: Stamp with data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -28172,7 +30795,7 @@ def put_page_add_stamp_with_http_info(self, name, page_number, stamp, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/stamp', 'PUT', path_params, @@ -28306,7 +30929,7 @@ def put_page_convert_to_bmp_with_http_info(self, name, page_number, out_path, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/bmp', 'PUT', path_params, @@ -28440,7 +31063,7 @@ def put_page_convert_to_emf_with_http_info(self, name, page_number, out_path, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/emf', 'PUT', path_params, @@ -28574,7 +31197,7 @@ def put_page_convert_to_gif_with_http_info(self, name, page_number, out_path, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/gif', 'PUT', path_params, @@ -28708,7 +31331,7 @@ def put_page_convert_to_jpeg_with_http_info(self, name, page_number, out_path, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/jpeg', 'PUT', path_params, @@ -28842,7 +31465,7 @@ def put_page_convert_to_png_with_http_info(self, name, page_number, out_path, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/png', 'PUT', path_params, @@ -28976,7 +31599,7 @@ def put_page_convert_to_tiff_with_http_info(self, name, page_number, out_path, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/pages/{pageNumber}/convert/tiff', 'PUT', path_params, @@ -29095,7 +31718,7 @@ def put_pcl_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/pcl', 'PUT', path_params, @@ -29239,7 +31862,7 @@ def put_pdf_in_request_to_doc_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/doc', 'PUT', path_params, @@ -29355,7 +31978,7 @@ def put_pdf_in_request_to_epub_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/epub', 'PUT', path_params, @@ -29533,7 +32156,7 @@ def put_pdf_in_request_to_html_with_http_info(self, out_path, **kwargs): query_params.append(('cssClassNamesPrefix', params['css_class_names_prefix'])) if 'explicit_list_of_saved_pages' in params: query_params.append(('explicitListOfSavedPages', params['explicit_list_of_saved_pages'])) - collection_formats['explicitListOfSavedPages'] = 'multi' + collection_formats['explicitListOfSavedPages'] = 'csv' if 'font_encoding_strategy' in params: query_params.append(('fontEncodingStrategy', params['font_encoding_strategy'])) if 'font_saving_mode' in params: @@ -29580,7 +32203,7 @@ def put_pdf_in_request_to_html_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/html', 'PUT', path_params, @@ -29696,7 +32319,7 @@ def put_pdf_in_request_to_la_te_x_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/latex', 'PUT', path_params, @@ -29808,7 +32431,7 @@ def put_pdf_in_request_to_mobi_xml_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/mobixml', 'PUT', path_params, @@ -29927,7 +32550,7 @@ def put_pdf_in_request_to_pdf_a_with_http_info(self, out_path, type, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/pdfa', 'PUT', path_params, @@ -30047,7 +32670,7 @@ def put_pdf_in_request_to_pptx_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/pptx', 'PUT', path_params, @@ -30159,7 +32782,7 @@ def put_pdf_in_request_to_svg_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/svg', 'PUT', path_params, @@ -30331,7 +32954,7 @@ def put_pdf_in_request_to_tiff_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/tiff', 'PUT', path_params, @@ -30459,7 +33082,7 @@ def put_pdf_in_request_to_xls_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/xls', 'PUT', path_params, @@ -30587,7 +33210,7 @@ def put_pdf_in_request_to_xlsx_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/xlsx', 'PUT', path_params, @@ -30699,7 +33322,7 @@ def put_pdf_in_request_to_xml_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/xml', 'PUT', path_params, @@ -30811,7 +33434,7 @@ def put_pdf_in_request_to_xps_with_http_info(self, out_path, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/xps', 'PUT', path_params, @@ -30962,7 +33585,7 @@ def put_pdf_in_storage_to_doc_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/doc', 'PUT', path_params, @@ -31085,7 +33708,7 @@ def put_pdf_in_storage_to_epub_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/epub', 'PUT', path_params, @@ -31270,7 +33893,7 @@ def put_pdf_in_storage_to_html_with_http_info(self, name, out_path, **kwargs): query_params.append(('cssClassNamesPrefix', params['css_class_names_prefix'])) if 'explicit_list_of_saved_pages' in params: query_params.append(('explicitListOfSavedPages', params['explicit_list_of_saved_pages'])) - collection_formats['explicitListOfSavedPages'] = 'multi' + collection_formats['explicitListOfSavedPages'] = 'csv' if 'font_encoding_strategy' in params: query_params.append(('fontEncodingStrategy', params['font_encoding_strategy'])) if 'font_saving_mode' in params: @@ -31317,7 +33940,7 @@ def put_pdf_in_storage_to_html_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/html', 'PUT', path_params, @@ -31440,7 +34063,7 @@ def put_pdf_in_storage_to_la_te_x_with_http_info(self, name, out_path, **kwargs) select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/latex', 'PUT', path_params, @@ -31559,7 +34182,7 @@ def put_pdf_in_storage_to_mobi_xml_with_http_info(self, name, out_path, **kwargs select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/mobixml', 'PUT', path_params, @@ -31685,7 +34308,7 @@ def put_pdf_in_storage_to_pdf_a_with_http_info(self, name, out_path, type, **kwa select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/pdfa', 'PUT', path_params, @@ -31812,7 +34435,7 @@ def put_pdf_in_storage_to_pptx_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/pptx', 'PUT', path_params, @@ -31931,7 +34554,7 @@ def put_pdf_in_storage_to_svg_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/svg', 'PUT', path_params, @@ -32110,7 +34733,7 @@ def put_pdf_in_storage_to_tiff_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/tiff', 'PUT', path_params, @@ -32245,7 +34868,7 @@ def put_pdf_in_storage_to_xls_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xls', 'PUT', path_params, @@ -32380,7 +35003,7 @@ def put_pdf_in_storage_to_xlsx_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xlsx', 'PUT', path_params, @@ -32499,7 +35122,7 @@ def put_pdf_in_storage_to_xml_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xml', 'PUT', path_params, @@ -32618,7 +35241,7 @@ def put_pdf_in_storage_to_xps_with_http_info(self, name, out_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xps', 'PUT', path_params, @@ -32744,7 +35367,7 @@ def put_poly_line_annotation_with_http_info(self, name, annotation_id, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/polyline/{annotationId}', 'PUT', path_params, @@ -32870,7 +35493,7 @@ def put_polygon_annotation_with_http_info(self, name, annotation_id, annotation, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/polygon/{annotationId}', 'PUT', path_params, @@ -32996,7 +35619,7 @@ def put_popup_annotation_with_http_info(self, name, annotation_id, annotation, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/popup/{annotationId}', 'PUT', path_params, @@ -33013,7 +35636,7 @@ def put_popup_annotation_with_http_info(self, name, annotation_id, annotation, * _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_privileges(self, name, **kwargs): + def put_privileges(self, name, privileges, **kwargs): """ Update privilege document. This method makes a synchronous HTTP request by default. To make an @@ -33022,12 +35645,12 @@ def put_privileges(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_privileges(name, callback=callback_function) + >>> thread = api.put_privileges(name, privileges, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param DocumentPrivilege privileges: Document privileges. + :param DocumentPrivilege privileges: Document privileges. DocumentPrivilege (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -33036,12 +35659,12 @@ def put_privileges(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_privileges_with_http_info(name, **kwargs) + return self.put_privileges_with_http_info(name, privileges, **kwargs) else: - (data) = self.put_privileges_with_http_info(name, **kwargs) + (data) = self.put_privileges_with_http_info(name, privileges, **kwargs) return data - def put_privileges_with_http_info(self, name, **kwargs): + def put_privileges_with_http_info(self, name, privileges, **kwargs): """ Update privilege document. This method makes a synchronous HTTP request by default. To make an @@ -33050,12 +35673,12 @@ def put_privileges_with_http_info(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_privileges_with_http_info(name, callback=callback_function) + >>> thread = api.put_privileges_with_http_info(name, privileges, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param DocumentPrivilege privileges: Document privileges. + :param DocumentPrivilege privileges: Document privileges. DocumentPrivilege (required) :param str storage: The document storage. :param str folder: The document folder. :return: AsposeResponse @@ -33081,6 +35704,9 @@ def put_privileges_with_http_info(self, name, **kwargs): # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): raise ValueError("Missing the required parameter `name` when calling `put_privileges`") + # verify the required parameter 'privileges' is set + if ('privileges' not in params) or (params['privileges'] is None): + raise ValueError("Missing the required parameter `privileges` when calling `put_privileges`") collection_formats = {} @@ -33112,7 +35738,7 @@ def put_privileges_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/privileges', 'PUT', path_params, @@ -33231,7 +35857,7 @@ def put_ps_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/ps', 'PUT', path_params, @@ -33357,7 +35983,7 @@ def put_redaction_annotation_with_http_info(self, name, annotation_id, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/redaction/{annotationId}', 'PUT', path_params, @@ -33484,7 +36110,7 @@ def put_replace_image_with_http_info(self, name, image_id, **kwargs): select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/images/{imageId}', 'PUT', path_params, @@ -33610,7 +36236,7 @@ def put_screen_annotation_with_http_info(self, name, annotation_id, annotation, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/screen/{annotationId}', 'PUT', path_params, @@ -33736,7 +36362,7 @@ def put_screen_annotation_data_extract_with_http_info(self, name, annotation_id, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/screen/{annotationId}/data/extract', 'PUT', path_params, @@ -33852,7 +36478,7 @@ def put_searchable_document_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/ocr', 'PUT', path_params, @@ -33978,7 +36604,7 @@ def put_set_property_with_http_info(self, name, property_name, value, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/documentproperties/{propertyName}', 'PUT', path_params, @@ -34104,7 +36730,7 @@ def put_sound_annotation_with_http_info(self, name, annotation_id, annotation, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/sound/{annotationId}', 'PUT', path_params, @@ -34230,7 +36856,7 @@ def put_sound_annotation_data_extract_with_http_info(self, name, annotation_id, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/sound/{annotationId}/data/extract', 'PUT', path_params, @@ -34356,7 +36982,7 @@ def put_square_annotation_with_http_info(self, name, annotation_id, annotation, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/square/{annotationId}', 'PUT', path_params, @@ -34482,7 +37108,7 @@ def put_squiggly_annotation_with_http_info(self, name, annotation_id, annotation select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/squiggly/{annotationId}', 'PUT', path_params, @@ -34608,7 +37234,7 @@ def put_stamp_annotation_with_http_info(self, name, annotation_id, annotation, * select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/stamp/{annotationId}', 'PUT', path_params, @@ -34734,7 +37360,7 @@ def put_stamp_annotation_data_extract_with_http_info(self, name, annotation_id, select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/stamp/{annotationId}/data/extract', 'PUT', path_params, @@ -34860,7 +37486,7 @@ def put_strike_out_annotation_with_http_info(self, name, annotation_id, annotati select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/strikeout/{annotationId}', 'PUT', path_params, @@ -35011,7 +37637,7 @@ def put_svg_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/svg', 'PUT', path_params, @@ -35137,7 +37763,7 @@ def put_table_with_http_info(self, name, table_id, table, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/tables/{tableId}', 'PUT', path_params, @@ -35263,7 +37889,7 @@ def put_text_annotation_with_http_info(self, name, annotation_id, annotation, ** select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/text/{annotationId}', 'PUT', path_params, @@ -35389,7 +38015,7 @@ def put_underline_annotation_with_http_info(self, name, annotation_id, annotatio select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/annotations/underline/{annotationId}', 'PUT', path_params, @@ -35406,7 +38032,7 @@ def put_underline_annotation_with_http_info(self, name, annotation_id, annotatio _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_update_field(self, name, field_name, **kwargs): + def put_update_field(self, name, field_name, field, **kwargs): """ Update field. This method makes a synchronous HTTP request by default. To make an @@ -35415,13 +38041,13 @@ def put_update_field(self, name, field_name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_update_field(name, field_name, callback=callback_function) + >>> thread = api.put_update_field(name, field_name, field, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str field_name: The name of a field to be updated. (required) - :param Field field: with the field data. + :param Field field: Field with the field data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: FieldResponse @@ -35430,12 +38056,12 @@ def put_update_field(self, name, field_name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_update_field_with_http_info(name, field_name, **kwargs) + return self.put_update_field_with_http_info(name, field_name, field, **kwargs) else: - (data) = self.put_update_field_with_http_info(name, field_name, **kwargs) + (data) = self.put_update_field_with_http_info(name, field_name, field, **kwargs) return data - def put_update_field_with_http_info(self, name, field_name, **kwargs): + def put_update_field_with_http_info(self, name, field_name, field, **kwargs): """ Update field. This method makes a synchronous HTTP request by default. To make an @@ -35444,13 +38070,13 @@ def put_update_field_with_http_info(self, name, field_name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_update_field_with_http_info(name, field_name, callback=callback_function) + >>> thread = api.put_update_field_with_http_info(name, field_name, field, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) :param str field_name: The name of a field to be updated. (required) - :param Field field: with the field data. + :param Field field: Field with the field data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: FieldResponse @@ -35479,6 +38105,9 @@ def put_update_field_with_http_info(self, name, field_name, **kwargs): # verify the required parameter 'field_name' is set if ('field_name' not in params) or (params['field_name'] is None): raise ValueError("Missing the required parameter `field_name` when calling `put_update_field`") + # verify the required parameter 'field' is set + if ('field' not in params) or (params['field'] is None): + raise ValueError("Missing the required parameter `field` when calling `put_update_field`") collection_formats = {} @@ -35512,7 +38141,7 @@ def put_update_field_with_http_info(self, name, field_name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/fields/{fieldName}', 'PUT', path_params, @@ -35529,7 +38158,7 @@ def put_update_field_with_http_info(self, name, field_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def put_update_fields(self, name, **kwargs): + def put_update_fields(self, name, fields, **kwargs): """ Update fields. This method makes a synchronous HTTP request by default. To make an @@ -35538,12 +38167,12 @@ def put_update_fields(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_update_fields(name, callback=callback_function) + >>> thread = api.put_update_fields(name, fields, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param Fields fields: with the fields data. + :param Fields fields: Fields with the fields data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: FieldsResponse @@ -35552,12 +38181,12 @@ def put_update_fields(self, name, **kwargs): """ kwargs['_return_http_data_only'] = True if kwargs.get('callback'): - return self.put_update_fields_with_http_info(name, **kwargs) + return self.put_update_fields_with_http_info(name, fields, **kwargs) else: - (data) = self.put_update_fields_with_http_info(name, **kwargs) + (data) = self.put_update_fields_with_http_info(name, fields, **kwargs) return data - def put_update_fields_with_http_info(self, name, **kwargs): + def put_update_fields_with_http_info(self, name, fields, **kwargs): """ Update fields. This method makes a synchronous HTTP request by default. To make an @@ -35566,12 +38195,12 @@ def put_update_fields_with_http_info(self, name, **kwargs): >>> def callback_function(response): >>> pprint(response) >>> - >>> thread = api.put_update_fields_with_http_info(name, callback=callback_function) + >>> thread = api.put_update_fields_with_http_info(name, fields, callback=callback_function) :param callback function: The callback function for asynchronous request. (optional) :param str name: The document name. (required) - :param Fields fields: with the fields data. + :param Fields fields: Fields with the fields data. (required) :param str storage: The document storage. :param str folder: The document folder. :return: FieldsResponse @@ -35597,6 +38226,9 @@ def put_update_fields_with_http_info(self, name, **kwargs): # verify the required parameter 'name' is set if ('name' not in params) or (params['name'] is None): raise ValueError("Missing the required parameter `name` when calling `put_update_fields`") + # verify the required parameter 'fields' is set + if ('fields' not in params) or (params['fields'] is None): + raise ValueError("Missing the required parameter `fields` when calling `put_update_fields`") collection_formats = {} @@ -35628,7 +38260,7 @@ def put_update_fields_with_http_info(self, name, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/fields', 'PUT', path_params, @@ -35775,7 +38407,7 @@ def put_web_in_storage_to_pdf_with_http_info(self, name, url, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/web', 'PUT', path_params, @@ -35887,7 +38519,7 @@ def put_xfa_pdf_in_request_to_acro_form_with_http_info(self, out_path, **kwargs) select_header_content_type(['multipart/form-data']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/convert/xfatoacroform', 'PUT', path_params, @@ -36006,7 +38638,7 @@ def put_xfa_pdf_in_storage_to_acro_form_with_http_info(self, name, out_path, **k select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/convert/xfatoacroform', 'PUT', path_params, @@ -36129,7 +38761,7 @@ def put_xml_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/xml', 'PUT', path_params, @@ -36248,7 +38880,7 @@ def put_xps_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/xps', 'PUT', path_params, @@ -36367,7 +38999,7 @@ def put_xsl_fo_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): select_header_content_type(['application/json']) # Authentication setting - auth_settings = [] + auth_settings = ['JWT'] return self.api_client.call_api('/pdf/{name}/create/xslfo', 'PUT', path_params, @@ -36383,3 +39015,222 @@ def put_xsl_fo_in_storage_to_pdf_with_http_info(self, name, src_path, **kwargs): _preload_content=params.get('_preload_content', True), _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + + def storage_exists(self, storage_name, **kwargs): + """ + Check if storage exists + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.storage_exists(storage_name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str storage_name: Storage name (required) + :return: StorageExist + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.storage_exists_with_http_info(storage_name, **kwargs) + else: + (data) = self.storage_exists_with_http_info(storage_name, **kwargs) + return data + + def storage_exists_with_http_info(self, storage_name, **kwargs): + """ + Check if storage exists + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.storage_exists_with_http_info(storage_name, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str storage_name: Storage name (required) + :return: StorageExist + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['storage_name'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method storage_exists" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'storage_name' is set + if ('storage_name' not in params) or (params['storage_name'] is None): + raise ValueError("Missing the required parameter `storage_name` when calling `storage_exists`") + + + collection_formats = {} + + path_params = {} + if 'storage_name' in params: + path_params['storageName'] = params['storage_name'] + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/storage/{storageName}/exist', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='StorageExist', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def upload_file(self, path, file, **kwargs): + """ + Upload file + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.upload_file(path, file, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str path: Path where to upload including filename and extension e.g. /file.ext or /Folder 1/file.ext If the content is multipart and path does not contains the file name it tries to get them from filename parameter from Content-Disposition header. (required) + :param file file: File to upload (required) + :param str storage_name: Storage name + :return: FilesUploadResult + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('callback'): + return self.upload_file_with_http_info(path, file, **kwargs) + else: + (data) = self.upload_file_with_http_info(path, file, **kwargs) + return data + + def upload_file_with_http_info(self, path, file, **kwargs): + """ + Upload file + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.upload_file_with_http_info(path, file, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param str path: Path where to upload including filename and extension e.g. /file.ext or /Folder 1/file.ext If the content is multipart and path does not contains the file name it tries to get them from filename parameter from Content-Disposition header. (required) + :param file file: File to upload (required) + :param str storage_name: Storage name + :return: FilesUploadResult + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['path', 'file', 'storage_name'] + all_params.append('callback') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method upload_file" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'path' is set + if ('path' not in params) or (params['path'] is None): + raise ValueError("Missing the required parameter `path` when calling `upload_file`") + # verify the required parameter 'file' is set + if ('file' not in params) or (params['file'] is None): + raise ValueError("Missing the required parameter `file` when calling `upload_file`") + + + collection_formats = {} + + path_params = {} + if 'path' in params: + path_params['path'] = params['path'] + + query_params = [] + if 'storage_name' in params: + query_params.append(('storageName', params['storage_name'])) + + header_params = {} + + form_params = [] + local_var_files = {} + if 'file' in params: + local_var_files['File'] = params['file'] + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json']) + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['multipart/form-data']) + + # Authentication setting + auth_settings = ['JWT'] + + return self.api_client.call_api('/pdf/storage/file/{path}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FilesUploadResult', + auth_settings=auth_settings, + callback=params.get('callback'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/asposepdfcloud/configuration.py b/asposepdfcloud/configuration.py index 097b65a..0974dc9 100644 --- a/asposepdfcloud/configuration.py +++ b/asposepdfcloud/configuration.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -62,7 +62,7 @@ def __init__(self): Constructor """ # Default Base url - self.host = "https://api.aspose.cloud/v2.0" + self.host = "https://api.aspose.cloud/v3.0" # Default api client self.api_client = None # Temp file folder for downloading files @@ -71,9 +71,6 @@ def __init__(self): # access token for OAuth self.access_token = "" - # refresh token for OAuth - self.refresh_token = "" - # Logging Settings self.logger = {} self.logger["package_logger"] = logging.getLogger("swagger_client") @@ -201,6 +198,6 @@ def to_debug_report(self): return "Python SDK Debug Report:\n"\ "OS: {env}\n"\ "Python Version: {pyversion}\n"\ - "Version of the API: 2.0\n"\ - "SDK Package Version: 19.5.0".\ + "Version of the API: 3.0\n"\ + "SDK Package Version: 19.7.0".\ format(env=sys.platform, pyversion=sys.version) diff --git a/asposepdfcloud/models/__init__.py b/asposepdfcloud/models/__init__.py index 5c89ff3..5844bc7 100644 --- a/asposepdfcloud/models/__init__.py +++ b/asposepdfcloud/models/__init__.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -35,7 +35,6 @@ from .annotation_state import AnnotationState from .annotation_type import AnnotationType from .antialiasing_processing_type import AntialiasingProcessingType -from .append_document import AppendDocument from .aspose_response import AsposeResponse from .border_corner_style import BorderCornerStyle from .border_info import BorderInfo @@ -54,10 +53,13 @@ from .doc_recognition_mode import DocRecognitionMode from .document_privilege import DocumentPrivilege from .epub_recognition_mode import EpubRecognitionMode +from .error import Error +from .error_details import ErrorDetails from .field_type import FieldType -from .file import File -from .file_exist import FileExist from .file_icon import FileIcon +from .file_versions import FileVersions +from .files_list import FilesList +from .files_upload_result import FilesUploadResult from .font_encoding_rules import FontEncodingRules from .font_saving_modes import FontSavingModes from .font_styles import FontStyles @@ -80,6 +82,7 @@ from .link_highlighting_mode import LinkHighlightingMode from .margin_info import MarginInfo from .merge_documents import MergeDocuments +from .object_exist import ObjectExist from .optimize_options import OptimizeOptions from .page_word_count import PageWordCount from .paragraph import Paragraph @@ -104,6 +107,8 @@ from .stamp import Stamp from .stamp_icon import StampIcon from .stamp_type import StampType +from .storage_exist import StorageExist +from .storage_file import StorageFile from .table_broken import TableBroken from .text_horizontal_alignment import TextHorizontalAlignment from .text_icon import TextIcon @@ -124,13 +129,16 @@ from .attachment_response import AttachmentResponse from .attachments import Attachments from .attachments_response import AttachmentsResponse +from .bookmark import Bookmark +from .bookmark_response import BookmarkResponse +from .bookmarks import Bookmarks +from .bookmarks_response import BookmarksResponse from .caret_annotation_response import CaretAnnotationResponse from .caret_annotations import CaretAnnotations from .caret_annotations_response import CaretAnnotationsResponse from .circle_annotation_response import CircleAnnotationResponse from .circle_annotations import CircleAnnotations from .circle_annotations_response import CircleAnnotationsResponse -from .disc_usage_response import DiscUsageResponse from .document import Document from .document_page_response import DocumentPageResponse from .document_pages_response import DocumentPagesResponse @@ -146,10 +154,7 @@ from .file_attachment_annotation_response import FileAttachmentAnnotationResponse from .file_attachment_annotations import FileAttachmentAnnotations from .file_attachment_annotations_response import FileAttachmentAnnotationsResponse -from .file_exist_response import FileExistResponse from .file_version import FileVersion -from .file_versions_response import FileVersionsResponse -from .files_response import FilesResponse from .free_text_annotation_response import FreeTextAnnotationResponse from .free_text_annotations import FreeTextAnnotations from .free_text_annotations_response import FreeTextAnnotationsResponse @@ -209,7 +214,6 @@ from .stamp_info import StampInfo from .stamps_info import StampsInfo from .stamps_info_response import StampsInfoResponse -from .storage_exist_response import StorageExistResponse from .strike_out_annotation_response import StrikeOutAnnotationResponse from .strike_out_annotations import StrikeOutAnnotations from .strike_out_annotations_response import StrikeOutAnnotationsResponse diff --git a/asposepdfcloud/models/annotation.py b/asposepdfcloud/models/annotation.py index 639f4bc..b8b714a 100644 --- a/asposepdfcloud/models/annotation.py +++ b/asposepdfcloud/models/annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -109,8 +109,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -301,6 +300,8 @@ def rect(self, rect): :param rect: The rect of this Annotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/annotation_flags.py b/asposepdfcloud/models/annotation_flags.py index 71e37b6..7071006 100644 --- a/asposepdfcloud/models/annotation_flags.py +++ b/asposepdfcloud/models/annotation_flags.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/annotation_info.py b/asposepdfcloud/models/annotation_info.py index 58a2166..387b8c3 100644 --- a/asposepdfcloud/models/annotation_info.py +++ b/asposepdfcloud/models/annotation_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -112,8 +112,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -122,8 +121,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.horizontal_alignment = horizontal_alignment if vertical_alignment is not None: self.vertical_alignment = vertical_alignment - if annotation_type is not None: - self.annotation_type = annotation_type + self.annotation_type = annotation_type @property def links(self): @@ -306,6 +304,8 @@ def rect(self, rect): :param rect: The rect of this AnnotationInfo. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -421,6 +421,8 @@ def annotation_type(self, annotation_type): :param annotation_type: The annotation_type of this AnnotationInfo. :type: AnnotationType """ + if annotation_type is None: + raise ValueError("Invalid value for `annotation_type`, must not be `None`") self._annotation_type = annotation_type diff --git a/asposepdfcloud/models/annotation_state.py b/asposepdfcloud/models/annotation_state.py index d2bf95c..56d180e 100644 --- a/asposepdfcloud/models/annotation_state.py +++ b/asposepdfcloud/models/annotation_state.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/annotation_type.py b/asposepdfcloud/models/annotation_type.py index 898c4b5..a844dcb 100644 --- a/asposepdfcloud/models/annotation_type.py +++ b/asposepdfcloud/models/annotation_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/annotations_info.py b/asposepdfcloud/models/annotations_info.py index 3ffc8ff..c87654f 100644 --- a/asposepdfcloud/models/annotations_info.py +++ b/asposepdfcloud/models/annotations_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/annotations_info_response.py b/asposepdfcloud/models/annotations_info_response.py index 47b11af..789fa38 100644 --- a/asposepdfcloud/models/annotations_info_response.py +++ b/asposepdfcloud/models/annotations_info_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/antialiasing_processing_type.py b/asposepdfcloud/models/antialiasing_processing_type.py index 9881999..80d43fb 100644 --- a/asposepdfcloud/models/antialiasing_processing_type.py +++ b/asposepdfcloud/models/antialiasing_processing_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/aspose_response.py b/asposepdfcloud/models/aspose_response.py index eb4ac81..ad7b503 100644 --- a/asposepdfcloud/models/aspose_response.py +++ b/asposepdfcloud/models/aspose_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/attachment.py b/asposepdfcloud/models/attachment.py index 1cc44a5..8eb8cad 100644 --- a/asposepdfcloud/models/attachment.py +++ b/asposepdfcloud/models/attachment.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -95,8 +95,7 @@ def __init__(self, links=None, description=None, mime_type=None, name=None, crea self.creation_date = creation_date if modification_date is not None: self.modification_date = modification_date - if size is not None: - self.size = size + self.size = size if check_sum is not None: self.check_sum = check_sum @@ -258,6 +257,8 @@ def size(self, size): :param size: The size of this Attachment. :type: int """ + if size is None: + raise ValueError("Invalid value for `size`, must not be `None`") self._size = size diff --git a/asposepdfcloud/models/attachment_response.py b/asposepdfcloud/models/attachment_response.py index f5e5432..e9324b2 100644 --- a/asposepdfcloud/models/attachment_response.py +++ b/asposepdfcloud/models/attachment_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/attachments.py b/asposepdfcloud/models/attachments.py index 2bf18af..eb03ae8 100644 --- a/asposepdfcloud/models/attachments.py +++ b/asposepdfcloud/models/attachments.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/attachments_response.py b/asposepdfcloud/models/attachments_response.py index c6d794d..52521d9 100644 --- a/asposepdfcloud/models/attachments_response.py +++ b/asposepdfcloud/models/attachments_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/bookmark.py b/asposepdfcloud/models/bookmark.py new file mode 100644 index 0000000..306ed1f --- /dev/null +++ b/asposepdfcloud/models/bookmark.py @@ -0,0 +1,590 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class Bookmark(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'links': 'list[Link]', + 'title': 'str', + 'italic': 'bool', + 'bold': 'bool', + 'color': 'Color', + 'action': 'str', + 'level': 'int', + 'destination': 'str', + 'page_display': 'str', + 'page_display_bottom': 'int', + 'page_display_left': 'int', + 'page_display_right': 'int', + 'page_display_top': 'int', + 'page_display_zoom': 'int', + 'page_number': 'int', + 'remote_file': 'str', + 'bookmarks': 'Bookmarks' + } + + attribute_map = { + 'links': 'Links', + 'title': 'Title', + 'italic': 'Italic', + 'bold': 'Bold', + 'color': 'Color', + 'action': 'Action', + 'level': 'Level', + 'destination': 'Destination', + 'page_display': 'PageDisplay', + 'page_display_bottom': 'PageDisplay_Bottom', + 'page_display_left': 'PageDisplay_Left', + 'page_display_right': 'PageDisplay_Right', + 'page_display_top': 'PageDisplay_Top', + 'page_display_zoom': 'PageDisplay_Zoom', + 'page_number': 'PageNumber', + 'remote_file': 'RemoteFile', + 'bookmarks': 'Bookmarks' + } + + def __init__(self, links=None, title=None, italic=None, bold=None, color=None, action=None, level=None, destination=None, page_display=None, page_display_bottom=None, page_display_left=None, page_display_right=None, page_display_top=None, page_display_zoom=None, page_number=None, remote_file=None, bookmarks=None): + """ + Bookmark - a model defined in Swagger + """ + + self._links = None + self._title = None + self._italic = None + self._bold = None + self._color = None + self._action = None + self._level = None + self._destination = None + self._page_display = None + self._page_display_bottom = None + self._page_display_left = None + self._page_display_right = None + self._page_display_top = None + self._page_display_zoom = None + self._page_number = None + self._remote_file = None + self._bookmarks = None + + if links is not None: + self.links = links + if title is not None: + self.title = title + if italic is not None: + self.italic = italic + if bold is not None: + self.bold = bold + if color is not None: + self.color = color + if action is not None: + self.action = action + if level is not None: + self.level = level + if destination is not None: + self.destination = destination + if page_display is not None: + self.page_display = page_display + if page_display_bottom is not None: + self.page_display_bottom = page_display_bottom + if page_display_left is not None: + self.page_display_left = page_display_left + if page_display_right is not None: + self.page_display_right = page_display_right + if page_display_top is not None: + self.page_display_top = page_display_top + if page_display_zoom is not None: + self.page_display_zoom = page_display_zoom + if page_number is not None: + self.page_number = page_number + if remote_file is not None: + self.remote_file = remote_file + if bookmarks is not None: + self.bookmarks = bookmarks + + @property + def links(self): + """ + Gets the links of this Bookmark. + Link to the document. + + :return: The links of this Bookmark. + :rtype: list[Link] + """ + return self._links + + @links.setter + def links(self, links): + """ + Sets the links of this Bookmark. + Link to the document. + + :param links: The links of this Bookmark. + :type: list[Link] + """ + + self._links = links + + @property + def title(self): + """ + Gets the title of this Bookmark. + Get the Title; + + :return: The title of this Bookmark. + :rtype: str + """ + return self._title + + @title.setter + def title(self, title): + """ + Sets the title of this Bookmark. + Get the Title; + + :param title: The title of this Bookmark. + :type: str + """ + + self._title = title + + @property + def italic(self): + """ + Gets the italic of this Bookmark. + Is bookmark italic. + + :return: The italic of this Bookmark. + :rtype: bool + """ + return self._italic + + @italic.setter + def italic(self, italic): + """ + Sets the italic of this Bookmark. + Is bookmark italic. + + :param italic: The italic of this Bookmark. + :type: bool + """ + + self._italic = italic + + @property + def bold(self): + """ + Gets the bold of this Bookmark. + Is bookmark bold. + + :return: The bold of this Bookmark. + :rtype: bool + """ + return self._bold + + @bold.setter + def bold(self, bold): + """ + Sets the bold of this Bookmark. + Is bookmark bold. + + :param bold: The bold of this Bookmark. + :type: bool + """ + + self._bold = bold + + @property + def color(self): + """ + Gets the color of this Bookmark. + Get the color + + :return: The color of this Bookmark. + :rtype: Color + """ + return self._color + + @color.setter + def color(self, color): + """ + Sets the color of this Bookmark. + Get the color + + :param color: The color of this Bookmark. + :type: Color + """ + + self._color = color + + @property + def action(self): + """ + Gets the action of this Bookmark. + Gets or sets the action bound with the bookmark. If PageNumber is presented the action can not be specified. The action type includes: \"GoTo\", \"GoToR\", \"Launch\", \"Named\". + + :return: The action of this Bookmark. + :rtype: str + """ + return self._action + + @action.setter + def action(self, action): + """ + Sets the action of this Bookmark. + Gets or sets the action bound with the bookmark. If PageNumber is presented the action can not be specified. The action type includes: \"GoTo\", \"GoToR\", \"Launch\", \"Named\". + + :param action: The action of this Bookmark. + :type: str + """ + + self._action = action + + @property + def level(self): + """ + Gets the level of this Bookmark. + Gets or sets bookmark's hierarchy level. + + :return: The level of this Bookmark. + :rtype: int + """ + return self._level + + @level.setter + def level(self, level): + """ + Sets the level of this Bookmark. + Gets or sets bookmark's hierarchy level. + + :param level: The level of this Bookmark. + :type: int + """ + + self._level = level + + @property + def destination(self): + """ + Gets the destination of this Bookmark. + Gets or sets bookmark's destination page. Required if action is set as string.Empty. + + :return: The destination of this Bookmark. + :rtype: str + """ + return self._destination + + @destination.setter + def destination(self, destination): + """ + Sets the destination of this Bookmark. + Gets or sets bookmark's destination page. Required if action is set as string.Empty. + + :param destination: The destination of this Bookmark. + :type: str + """ + + self._destination = destination + + @property + def page_display(self): + """ + Gets the page_display of this Bookmark. + Gets or sets the type of display bookmark's destination page. + + :return: The page_display of this Bookmark. + :rtype: str + """ + return self._page_display + + @page_display.setter + def page_display(self, page_display): + """ + Sets the page_display of this Bookmark. + Gets or sets the type of display bookmark's destination page. + + :param page_display: The page_display of this Bookmark. + :type: str + """ + + self._page_display = page_display + + @property + def page_display_bottom(self): + """ + Gets the page_display_bottom of this Bookmark. + Gets or sets the bottom coordinate of page display. + + :return: The page_display_bottom of this Bookmark. + :rtype: int + """ + return self._page_display_bottom + + @page_display_bottom.setter + def page_display_bottom(self, page_display_bottom): + """ + Sets the page_display_bottom of this Bookmark. + Gets or sets the bottom coordinate of page display. + + :param page_display_bottom: The page_display_bottom of this Bookmark. + :type: int + """ + + self._page_display_bottom = page_display_bottom + + @property + def page_display_left(self): + """ + Gets the page_display_left of this Bookmark. + Gets or sets the left coordinate of page display. + + :return: The page_display_left of this Bookmark. + :rtype: int + """ + return self._page_display_left + + @page_display_left.setter + def page_display_left(self, page_display_left): + """ + Sets the page_display_left of this Bookmark. + Gets or sets the left coordinate of page display. + + :param page_display_left: The page_display_left of this Bookmark. + :type: int + """ + + self._page_display_left = page_display_left + + @property + def page_display_right(self): + """ + Gets the page_display_right of this Bookmark. + Gets or sets the right coordinate of page display. + + :return: The page_display_right of this Bookmark. + :rtype: int + """ + return self._page_display_right + + @page_display_right.setter + def page_display_right(self, page_display_right): + """ + Sets the page_display_right of this Bookmark. + Gets or sets the right coordinate of page display. + + :param page_display_right: The page_display_right of this Bookmark. + :type: int + """ + + self._page_display_right = page_display_right + + @property + def page_display_top(self): + """ + Gets the page_display_top of this Bookmark. + Gets or sets the top coordinate of page display. + + :return: The page_display_top of this Bookmark. + :rtype: int + """ + return self._page_display_top + + @page_display_top.setter + def page_display_top(self, page_display_top): + """ + Sets the page_display_top of this Bookmark. + Gets or sets the top coordinate of page display. + + :param page_display_top: The page_display_top of this Bookmark. + :type: int + """ + + self._page_display_top = page_display_top + + @property + def page_display_zoom(self): + """ + Gets the page_display_zoom of this Bookmark. + Gets or sets the zoom factor of page display. + + :return: The page_display_zoom of this Bookmark. + :rtype: int + """ + return self._page_display_zoom + + @page_display_zoom.setter + def page_display_zoom(self, page_display_zoom): + """ + Sets the page_display_zoom of this Bookmark. + Gets or sets the zoom factor of page display. + + :param page_display_zoom: The page_display_zoom of this Bookmark. + :type: int + """ + + self._page_display_zoom = page_display_zoom + + @property + def page_number(self): + """ + Gets the page_number of this Bookmark. + Gets or sets the number of bookmark's destination page. + + :return: The page_number of this Bookmark. + :rtype: int + """ + return self._page_number + + @page_number.setter + def page_number(self, page_number): + """ + Sets the page_number of this Bookmark. + Gets or sets the number of bookmark's destination page. + + :param page_number: The page_number of this Bookmark. + :type: int + """ + + self._page_number = page_number + + @property + def remote_file(self): + """ + Gets the remote_file of this Bookmark. + Gets or sets the file (path) which is required for \"GoToR\" action of bookmark. + + :return: The remote_file of this Bookmark. + :rtype: str + """ + return self._remote_file + + @remote_file.setter + def remote_file(self, remote_file): + """ + Sets the remote_file of this Bookmark. + Gets or sets the file (path) which is required for \"GoToR\" action of bookmark. + + :param remote_file: The remote_file of this Bookmark. + :type: str + """ + + self._remote_file = remote_file + + @property + def bookmarks(self): + """ + Gets the bookmarks of this Bookmark. + The children bookmarks. + + :return: The bookmarks of this Bookmark. + :rtype: Bookmarks + """ + return self._bookmarks + + @bookmarks.setter + def bookmarks(self, bookmarks): + """ + Sets the bookmarks of this Bookmark. + The children bookmarks. + + :param bookmarks: The bookmarks of this Bookmark. + :type: Bookmarks + """ + + self._bookmarks = bookmarks + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, Bookmark): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/bookmark_response.py b/asposepdfcloud/models/bookmark_response.py new file mode 100644 index 0000000..cfbcb66 --- /dev/null +++ b/asposepdfcloud/models/bookmark_response.py @@ -0,0 +1,199 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class BookmarkResponse(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'code': 'int', + 'status': 'str', + 'bookmark': 'Bookmark' + } + + attribute_map = { + 'code': 'Code', + 'status': 'Status', + 'bookmark': 'Bookmark' + } + + def __init__(self, code=None, status=None, bookmark=None): + """ + BookmarkResponse - a model defined in Swagger + """ + + self._code = None + self._status = None + self._bookmark = None + + self.code = code + if status is not None: + self.status = status + if bookmark is not None: + self.bookmark = bookmark + + @property + def code(self): + """ + Gets the code of this BookmarkResponse. + Response status code. + + :return: The code of this BookmarkResponse. + :rtype: int + """ + return self._code + + @code.setter + def code(self, code): + """ + Sets the code of this BookmarkResponse. + Response status code. + + :param code: The code of this BookmarkResponse. + :type: int + """ + if code is None: + raise ValueError("Invalid value for `code`, must not be `None`") + + self._code = code + + @property + def status(self): + """ + Gets the status of this BookmarkResponse. + Response status. + + :return: The status of this BookmarkResponse. + :rtype: str + """ + return self._status + + @status.setter + def status(self, status): + """ + Sets the status of this BookmarkResponse. + Response status. + + :param status: The status of this BookmarkResponse. + :type: str + """ + + self._status = status + + @property + def bookmark(self): + """ + Gets the bookmark of this BookmarkResponse. + Bookmark object + + :return: The bookmark of this BookmarkResponse. + :rtype: Bookmark + """ + return self._bookmark + + @bookmark.setter + def bookmark(self, bookmark): + """ + Sets the bookmark of this BookmarkResponse. + Bookmark object + + :param bookmark: The bookmark of this BookmarkResponse. + :type: Bookmark + """ + + self._bookmark = bookmark + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, BookmarkResponse): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/bookmarks.py b/asposepdfcloud/models/bookmarks.py new file mode 100644 index 0000000..c10382f --- /dev/null +++ b/asposepdfcloud/models/bookmarks.py @@ -0,0 +1,170 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class Bookmarks(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'links': 'list[Link]', + 'list': 'list[Bookmark]' + } + + attribute_map = { + 'links': 'Links', + 'list': 'List' + } + + def __init__(self, links=None, list=None): + """ + Bookmarks - a model defined in Swagger + """ + + self._links = None + self._list = None + + if links is not None: + self.links = links + if list is not None: + self.list = list + + @property + def links(self): + """ + Gets the links of this Bookmarks. + Link to the document. + + :return: The links of this Bookmarks. + :rtype: list[Link] + """ + return self._links + + @links.setter + def links(self, links): + """ + Sets the links of this Bookmarks. + Link to the document. + + :param links: The links of this Bookmarks. + :type: list[Link] + """ + + self._links = links + + @property + def list(self): + """ + Gets the list of this Bookmarks. + List of bookmarks. + + :return: The list of this Bookmarks. + :rtype: list[Bookmark] + """ + return self._list + + @list.setter + def list(self, list): + """ + Sets the list of this Bookmarks. + List of bookmarks. + + :param list: The list of this Bookmarks. + :type: list[Bookmark] + """ + + self._list = list + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, Bookmarks): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/bookmarks_response.py b/asposepdfcloud/models/bookmarks_response.py new file mode 100644 index 0000000..2b0c68d --- /dev/null +++ b/asposepdfcloud/models/bookmarks_response.py @@ -0,0 +1,199 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class BookmarksResponse(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'code': 'int', + 'status': 'str', + 'bookmarks': 'Bookmarks' + } + + attribute_map = { + 'code': 'Code', + 'status': 'Status', + 'bookmarks': 'Bookmarks' + } + + def __init__(self, code=None, status=None, bookmarks=None): + """ + BookmarksResponse - a model defined in Swagger + """ + + self._code = None + self._status = None + self._bookmarks = None + + self.code = code + if status is not None: + self.status = status + if bookmarks is not None: + self.bookmarks = bookmarks + + @property + def code(self): + """ + Gets the code of this BookmarksResponse. + Response status code. + + :return: The code of this BookmarksResponse. + :rtype: int + """ + return self._code + + @code.setter + def code(self, code): + """ + Sets the code of this BookmarksResponse. + Response status code. + + :param code: The code of this BookmarksResponse. + :type: int + """ + if code is None: + raise ValueError("Invalid value for `code`, must not be `None`") + + self._code = code + + @property + def status(self): + """ + Gets the status of this BookmarksResponse. + Response status. + + :return: The status of this BookmarksResponse. + :rtype: str + """ + return self._status + + @status.setter + def status(self, status): + """ + Sets the status of this BookmarksResponse. + Response status. + + :param status: The status of this BookmarksResponse. + :type: str + """ + + self._status = status + + @property + def bookmarks(self): + """ + Gets the bookmarks of this BookmarksResponse. + Bookmarks object + + :return: The bookmarks of this BookmarksResponse. + :rtype: Bookmarks + """ + return self._bookmarks + + @bookmarks.setter + def bookmarks(self, bookmarks): + """ + Sets the bookmarks of this BookmarksResponse. + Bookmarks object + + :param bookmarks: The bookmarks of this BookmarksResponse. + :type: Bookmarks + """ + + self._bookmarks = bookmarks + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, BookmarksResponse): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/border_corner_style.py b/asposepdfcloud/models/border_corner_style.py index 22c0b5b..042b91e 100644 --- a/asposepdfcloud/models/border_corner_style.py +++ b/asposepdfcloud/models/border_corner_style.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/border_info.py b/asposepdfcloud/models/border_info.py index f45128a..8428e22 100644 --- a/asposepdfcloud/models/border_info.py +++ b/asposepdfcloud/models/border_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/cap_style.py b/asposepdfcloud/models/cap_style.py index 3b6ac78..ab54c54 100644 --- a/asposepdfcloud/models/cap_style.py +++ b/asposepdfcloud/models/cap_style.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/caption_position.py b/asposepdfcloud/models/caption_position.py index c73f4eb..c58ccc3 100644 --- a/asposepdfcloud/models/caption_position.py +++ b/asposepdfcloud/models/caption_position.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/caret_annotation.py b/asposepdfcloud/models/caret_annotation.py index 47757e8..ae2290b 100644 --- a/asposepdfcloud/models/caret_annotation.py +++ b/asposepdfcloud/models/caret_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -127,8 +127,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -331,6 +330,8 @@ def rect(self, rect): :param rect: The rect of this CaretAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/caret_annotation_response.py b/asposepdfcloud/models/caret_annotation_response.py index 1ef611a..e355040 100644 --- a/asposepdfcloud/models/caret_annotation_response.py +++ b/asposepdfcloud/models/caret_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/caret_annotations.py b/asposepdfcloud/models/caret_annotations.py index f5c7ef6..d8ad128 100644 --- a/asposepdfcloud/models/caret_annotations.py +++ b/asposepdfcloud/models/caret_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/caret_annotations_response.py b/asposepdfcloud/models/caret_annotations_response.py index 4c6cede..9e7844e 100644 --- a/asposepdfcloud/models/caret_annotations_response.py +++ b/asposepdfcloud/models/caret_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/caret_symbol.py b/asposepdfcloud/models/caret_symbol.py index fa5191e..23541d6 100644 --- a/asposepdfcloud/models/caret_symbol.py +++ b/asposepdfcloud/models/caret_symbol.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/cell.py b/asposepdfcloud/models/cell.py index f5399cc..ac70009 100644 --- a/asposepdfcloud/models/cell.py +++ b/asposepdfcloud/models/cell.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/cell_recognized.py b/asposepdfcloud/models/cell_recognized.py index 8c9494a..825c072 100644 --- a/asposepdfcloud/models/cell_recognized.py +++ b/asposepdfcloud/models/cell_recognized.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -74,7 +74,7 @@ def __init__(self, text_rects=None, rectangle=None): def text_rects(self): """ Gets the text_rects of this CellRecognized. - Gets collection of objects that describes text containing in the cell + Gets collection of TextRect objects that describes text containing in the cell :return: The text_rects of this CellRecognized. :rtype: TextRects @@ -85,7 +85,7 @@ def text_rects(self): def text_rects(self, text_rects): """ Sets the text_rects of this CellRecognized. - Gets collection of objects that describes text containing in the cell + Gets collection of TextRect objects that describes text containing in the cell :param text_rects: The text_rects of this CellRecognized. :type: TextRects diff --git a/asposepdfcloud/models/circle_annotation.py b/asposepdfcloud/models/circle_annotation.py index 9de3e23..ed29456 100644 --- a/asposepdfcloud/models/circle_annotation.py +++ b/asposepdfcloud/models/circle_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -127,8 +127,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -331,6 +330,8 @@ def rect(self, rect): :param rect: The rect of this CircleAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/circle_annotation_response.py b/asposepdfcloud/models/circle_annotation_response.py index 576f4c2..9e8461e 100644 --- a/asposepdfcloud/models/circle_annotation_response.py +++ b/asposepdfcloud/models/circle_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/circle_annotations.py b/asposepdfcloud/models/circle_annotations.py index 4414e3f..b3b2cd7 100644 --- a/asposepdfcloud/models/circle_annotations.py +++ b/asposepdfcloud/models/circle_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/circle_annotations_response.py b/asposepdfcloud/models/circle_annotations_response.py index deaeefb..8172fed 100644 --- a/asposepdfcloud/models/circle_annotations_response.py +++ b/asposepdfcloud/models/circle_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/color.py b/asposepdfcloud/models/color.py index 2bfd539..545ddb8 100644 --- a/asposepdfcloud/models/color.py +++ b/asposepdfcloud/models/color.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/color_depth.py b/asposepdfcloud/models/color_depth.py index e927b41..921352a 100644 --- a/asposepdfcloud/models/color_depth.py +++ b/asposepdfcloud/models/color_depth.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/column_adjustment.py b/asposepdfcloud/models/column_adjustment.py index 6040281..e4470fb 100644 --- a/asposepdfcloud/models/column_adjustment.py +++ b/asposepdfcloud/models/column_adjustment.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/common_figure_annotation.py b/asposepdfcloud/models/common_figure_annotation.py index fc705a1..6011fc5 100644 --- a/asposepdfcloud/models/common_figure_annotation.py +++ b/asposepdfcloud/models/common_figure_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -127,8 +127,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -331,6 +330,8 @@ def rect(self, rect): :param rect: The rect of this CommonFigureAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/compression_type.py b/asposepdfcloud/models/compression_type.py index c776c71..e891b76 100644 --- a/asposepdfcloud/models/compression_type.py +++ b/asposepdfcloud/models/compression_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/crypto_algorithm.py b/asposepdfcloud/models/crypto_algorithm.py index f12f940..a686efa 100644 --- a/asposepdfcloud/models/crypto_algorithm.py +++ b/asposepdfcloud/models/crypto_algorithm.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/disc_usage.py b/asposepdfcloud/models/disc_usage.py index cd0172e..c446057 100644 --- a/asposepdfcloud/models/disc_usage.py +++ b/asposepdfcloud/models/disc_usage.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -72,6 +72,7 @@ def __init__(self, used_size=None, total_size=None): def used_size(self): """ Gets the used_size of this DiscUsage. + Application used disc space. :return: The used_size of this DiscUsage. :rtype: int @@ -82,6 +83,7 @@ def used_size(self): def used_size(self, used_size): """ Sets the used_size of this DiscUsage. + Application used disc space. :param used_size: The used_size of this DiscUsage. :type: int @@ -95,6 +97,7 @@ def used_size(self, used_size): def total_size(self): """ Gets the total_size of this DiscUsage. + Total disc space. :return: The total_size of this DiscUsage. :rtype: int @@ -105,6 +108,7 @@ def total_size(self): def total_size(self, total_size): """ Sets the total_size of this DiscUsage. + Total disc space. :param total_size: The total_size of this DiscUsage. :type: int diff --git a/asposepdfcloud/models/doc_format.py b/asposepdfcloud/models/doc_format.py index 2819f4f..3055a12 100644 --- a/asposepdfcloud/models/doc_format.py +++ b/asposepdfcloud/models/doc_format.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/doc_recognition_mode.py b/asposepdfcloud/models/doc_recognition_mode.py index 214a59b..e295a21 100644 --- a/asposepdfcloud/models/doc_recognition_mode.py +++ b/asposepdfcloud/models/doc_recognition_mode.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document.py b/asposepdfcloud/models/document.py index 49529dc..ee67d37 100644 --- a/asposepdfcloud/models/document.py +++ b/asposepdfcloud/models/document.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_page_response.py b/asposepdfcloud/models/document_page_response.py index cb70970..997e045 100644 --- a/asposepdfcloud/models/document_page_response.py +++ b/asposepdfcloud/models/document_page_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_pages_response.py b/asposepdfcloud/models/document_pages_response.py index 909d49e..35856bf 100644 --- a/asposepdfcloud/models/document_pages_response.py +++ b/asposepdfcloud/models/document_pages_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_privilege.py b/asposepdfcloud/models/document_privilege.py index b8ee2b3..0e81ea7 100644 --- a/asposepdfcloud/models/document_privilege.py +++ b/asposepdfcloud/models/document_privilege.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_properties.py b/asposepdfcloud/models/document_properties.py index a4f5314..af1e80c 100644 --- a/asposepdfcloud/models/document_properties.py +++ b/asposepdfcloud/models/document_properties.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_properties_response.py b/asposepdfcloud/models/document_properties_response.py index f0f1495..eaf431b 100644 --- a/asposepdfcloud/models/document_properties_response.py +++ b/asposepdfcloud/models/document_properties_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_property.py b/asposepdfcloud/models/document_property.py index bf21e1e..8734167 100644 --- a/asposepdfcloud/models/document_property.py +++ b/asposepdfcloud/models/document_property.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -77,8 +77,7 @@ def __init__(self, links=None, name=None, value=None, built_in=None): self.name = name if value is not None: self.value = value - if built_in is not None: - self.built_in = built_in + self.built_in = built_in @property def links(self): @@ -169,6 +168,8 @@ def built_in(self, built_in): :param built_in: The built_in of this DocumentProperty. :type: bool """ + if built_in is None: + raise ValueError("Invalid value for `built_in`, must not be `None`") self._built_in = built_in diff --git a/asposepdfcloud/models/document_property_response.py b/asposepdfcloud/models/document_property_response.py index 86ffd25..43ed81c 100644 --- a/asposepdfcloud/models/document_property_response.py +++ b/asposepdfcloud/models/document_property_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/document_response.py b/asposepdfcloud/models/document_response.py index 6281ad9..59fccc5 100644 --- a/asposepdfcloud/models/document_response.py +++ b/asposepdfcloud/models/document_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/epub_recognition_mode.py b/asposepdfcloud/models/epub_recognition_mode.py index 4f128e6..d029c3e 100644 --- a/asposepdfcloud/models/epub_recognition_mode.py +++ b/asposepdfcloud/models/epub_recognition_mode.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/error.py b/asposepdfcloud/models/error.py new file mode 100644 index 0000000..60756f6 --- /dev/null +++ b/asposepdfcloud/models/error.py @@ -0,0 +1,226 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class Error(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'code': 'str', + 'message': 'str', + 'description': 'str', + 'inner_error': 'ErrorDetails' + } + + attribute_map = { + 'code': 'Code', + 'message': 'Message', + 'description': 'Description', + 'inner_error': 'InnerError' + } + + def __init__(self, code=None, message=None, description=None, inner_error=None): + """ + Error - a model defined in Swagger + """ + + self._code = None + self._message = None + self._description = None + self._inner_error = None + + if code is not None: + self.code = code + if message is not None: + self.message = message + if description is not None: + self.description = description + if inner_error is not None: + self.inner_error = inner_error + + @property + def code(self): + """ + Gets the code of this Error. + Code + + :return: The code of this Error. + :rtype: str + """ + return self._code + + @code.setter + def code(self, code): + """ + Sets the code of this Error. + Code + + :param code: The code of this Error. + :type: str + """ + + self._code = code + + @property + def message(self): + """ + Gets the message of this Error. + Message + + :return: The message of this Error. + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """ + Sets the message of this Error. + Message + + :param message: The message of this Error. + :type: str + """ + + self._message = message + + @property + def description(self): + """ + Gets the description of this Error. + Description + + :return: The description of this Error. + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """ + Sets the description of this Error. + Description + + :param description: The description of this Error. + :type: str + """ + + self._description = description + + @property + def inner_error(self): + """ + Gets the inner_error of this Error. + Inner Error + + :return: The inner_error of this Error. + :rtype: ErrorDetails + """ + return self._inner_error + + @inner_error.setter + def inner_error(self, inner_error): + """ + Sets the inner_error of this Error. + Inner Error + + :param inner_error: The inner_error of this Error. + :type: ErrorDetails + """ + + self._inner_error = inner_error + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, Error): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/error_details.py b/asposepdfcloud/models/error_details.py new file mode 100644 index 0000000..c59e14e --- /dev/null +++ b/asposepdfcloud/models/error_details.py @@ -0,0 +1,171 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class ErrorDetails(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'request_id': 'str', + 'date': 'datetime' + } + + attribute_map = { + 'request_id': 'RequestId', + 'date': 'Date' + } + + def __init__(self, request_id=None, date=None): + """ + ErrorDetails - a model defined in Swagger + """ + + self._request_id = None + self._date = None + + if request_id is not None: + self.request_id = request_id + self.date = date + + @property + def request_id(self): + """ + Gets the request_id of this ErrorDetails. + The request id + + :return: The request_id of this ErrorDetails. + :rtype: str + """ + return self._request_id + + @request_id.setter + def request_id(self, request_id): + """ + Sets the request_id of this ErrorDetails. + The request id + + :param request_id: The request_id of this ErrorDetails. + :type: str + """ + + self._request_id = request_id + + @property + def date(self): + """ + Gets the date of this ErrorDetails. + Date + + :return: The date of this ErrorDetails. + :rtype: datetime + """ + return self._date + + @date.setter + def date(self, date): + """ + Sets the date of this ErrorDetails. + Date + + :param date: The date of this ErrorDetails. + :type: datetime + """ + if date is None: + raise ValueError("Invalid value for `date`, must not be `None`") + + self._date = date + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, ErrorDetails): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/field.py b/asposepdfcloud/models/field.py index 474033a..95d1ec6 100644 --- a/asposepdfcloud/models/field.py +++ b/asposepdfcloud/models/field.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -87,8 +87,7 @@ def __init__(self, links=None, name=None, selected_items=None, type=None, rect=N self.type = type if rect is not None: self.rect = rect - if values is not None: - self.values = values + self.values = values @property def links(self): @@ -225,6 +224,8 @@ def values(self, values): :param values: The values of this Field. :type: list[str] """ + if values is None: + raise ValueError("Invalid value for `values`, must not be `None`") self._values = values diff --git a/asposepdfcloud/models/field_response.py b/asposepdfcloud/models/field_response.py index 8756487..2616200 100644 --- a/asposepdfcloud/models/field_response.py +++ b/asposepdfcloud/models/field_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/field_type.py b/asposepdfcloud/models/field_type.py index 851c474..8bdf319 100644 --- a/asposepdfcloud/models/field_type.py +++ b/asposepdfcloud/models/field_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/fields.py b/asposepdfcloud/models/fields.py index 0eab389..53efa8d 100644 --- a/asposepdfcloud/models/fields.py +++ b/asposepdfcloud/models/fields.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -67,8 +67,7 @@ def __init__(self, links=None, list=None): if links is not None: self.links = links - if list is not None: - self.list = list + self.list = list @property def links(self): @@ -113,6 +112,8 @@ def list(self, list): :param list: The list of this Fields. :type: list[Field] """ + if list is None: + raise ValueError("Invalid value for `list`, must not be `None`") self._list = list diff --git a/asposepdfcloud/models/fields_response.py b/asposepdfcloud/models/fields_response.py index 759cac7..9555027 100644 --- a/asposepdfcloud/models/fields_response.py +++ b/asposepdfcloud/models/fields_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/file_attachment_annotation.py b/asposepdfcloud/models/file_attachment_annotation.py index 177efcc..cf08dea 100644 --- a/asposepdfcloud/models/file_attachment_annotation.py +++ b/asposepdfcloud/models/file_attachment_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -136,8 +136,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -346,6 +345,8 @@ def rect(self, rect): :param rect: The rect of this FileAttachmentAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/file_attachment_annotation_response.py b/asposepdfcloud/models/file_attachment_annotation_response.py index 25a306c..d9943c8 100644 --- a/asposepdfcloud/models/file_attachment_annotation_response.py +++ b/asposepdfcloud/models/file_attachment_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/file_attachment_annotations.py b/asposepdfcloud/models/file_attachment_annotations.py index a57d2d8..498e8e7 100644 --- a/asposepdfcloud/models/file_attachment_annotations.py +++ b/asposepdfcloud/models/file_attachment_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/file_attachment_annotations_response.py b/asposepdfcloud/models/file_attachment_annotations_response.py index 201a56a..40f9342 100644 --- a/asposepdfcloud/models/file_attachment_annotations_response.py +++ b/asposepdfcloud/models/file_attachment_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/file_icon.py b/asposepdfcloud/models/file_icon.py index 139b6e9..d3a32ef 100644 --- a/asposepdfcloud/models/file_icon.py +++ b/asposepdfcloud/models/file_icon.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/file_version.py b/asposepdfcloud/models/file_version.py index ff23a10..f886bd8 100644 --- a/asposepdfcloud/models/file_version.py +++ b/asposepdfcloud/models/file_version.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -90,13 +90,13 @@ def __init__(self, name=None, is_folder=None, modified_date=None, size=None, pat self.path = path if version_id is not None: self.version_id = version_id - if is_latest is not None: - self.is_latest = is_latest + self.is_latest = is_latest @property def name(self): """ Gets the name of this FileVersion. + File or folder name. :return: The name of this FileVersion. :rtype: str @@ -107,6 +107,7 @@ def name(self): def name(self, name): """ Sets the name of this FileVersion. + File or folder name. :param name: The name of this FileVersion. :type: str @@ -118,6 +119,7 @@ def name(self, name): def is_folder(self): """ Gets the is_folder of this FileVersion. + True if it is a folder. :return: The is_folder of this FileVersion. :rtype: bool @@ -128,6 +130,7 @@ def is_folder(self): def is_folder(self, is_folder): """ Sets the is_folder of this FileVersion. + True if it is a folder. :param is_folder: The is_folder of this FileVersion. :type: bool @@ -141,6 +144,7 @@ def is_folder(self, is_folder): def modified_date(self): """ Gets the modified_date of this FileVersion. + File or folder last modified DateTime. :return: The modified_date of this FileVersion. :rtype: datetime @@ -151,6 +155,7 @@ def modified_date(self): def modified_date(self, modified_date): """ Sets the modified_date of this FileVersion. + File or folder last modified DateTime. :param modified_date: The modified_date of this FileVersion. :type: datetime @@ -162,6 +167,7 @@ def modified_date(self, modified_date): def size(self): """ Gets the size of this FileVersion. + File or folder size. :return: The size of this FileVersion. :rtype: int @@ -172,6 +178,7 @@ def size(self): def size(self, size): """ Sets the size of this FileVersion. + File or folder size. :param size: The size of this FileVersion. :type: int @@ -185,6 +192,7 @@ def size(self, size): def path(self): """ Gets the path of this FileVersion. + File or folder path. :return: The path of this FileVersion. :rtype: str @@ -195,6 +203,7 @@ def path(self): def path(self, path): """ Sets the path of this FileVersion. + File or folder path. :param path: The path of this FileVersion. :type: str @@ -206,6 +215,7 @@ def path(self, path): def version_id(self): """ Gets the version_id of this FileVersion. + File Version ID. :return: The version_id of this FileVersion. :rtype: str @@ -216,6 +226,7 @@ def version_id(self): def version_id(self, version_id): """ Sets the version_id of this FileVersion. + File Version ID. :param version_id: The version_id of this FileVersion. :type: str @@ -227,6 +238,7 @@ def version_id(self, version_id): def is_latest(self): """ Gets the is_latest of this FileVersion. + Specifies whether the file is (true) or is not (false) the latest version of an file. :return: The is_latest of this FileVersion. :rtype: bool @@ -237,10 +249,13 @@ def is_latest(self): def is_latest(self, is_latest): """ Sets the is_latest of this FileVersion. + Specifies whether the file is (true) or is not (false) the latest version of an file. :param is_latest: The is_latest of this FileVersion. :type: bool """ + if is_latest is None: + raise ValueError("Invalid value for `is_latest`, must not be `None`") self._is_latest = is_latest diff --git a/asposepdfcloud/models/file_versions.py b/asposepdfcloud/models/file_versions.py new file mode 100644 index 0000000..f95e7e7 --- /dev/null +++ b/asposepdfcloud/models/file_versions.py @@ -0,0 +1,142 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class FileVersions(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'value': 'list[FileVersion]' + } + + attribute_map = { + 'value': 'Value' + } + + def __init__(self, value=None): + """ + FileVersions - a model defined in Swagger + """ + + self._value = None + + if value is not None: + self.value = value + + @property + def value(self): + """ + Gets the value of this FileVersions. + File versions FileVersion. + + :return: The value of this FileVersions. + :rtype: list[FileVersion] + """ + return self._value + + @value.setter + def value(self, value): + """ + Sets the value of this FileVersions. + File versions FileVersion. + + :param value: The value of this FileVersions. + :type: list[FileVersion] + """ + + self._value = value + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, FileVersions): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/files_list.py b/asposepdfcloud/models/files_list.py new file mode 100644 index 0000000..2f053b4 --- /dev/null +++ b/asposepdfcloud/models/files_list.py @@ -0,0 +1,142 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class FilesList(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'value': 'list[StorageFile]' + } + + attribute_map = { + 'value': 'Value' + } + + def __init__(self, value=None): + """ + FilesList - a model defined in Swagger + """ + + self._value = None + + if value is not None: + self.value = value + + @property + def value(self): + """ + Gets the value of this FilesList. + Files and folders contained by folder StorageFile. + + :return: The value of this FilesList. + :rtype: list[StorageFile] + """ + return self._value + + @value.setter + def value(self, value): + """ + Sets the value of this FilesList. + Files and folders contained by folder StorageFile. + + :param value: The value of this FilesList. + :type: list[StorageFile] + """ + + self._value = value + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, FilesList): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/files_upload_result.py b/asposepdfcloud/models/files_upload_result.py new file mode 100644 index 0000000..a6a37f6 --- /dev/null +++ b/asposepdfcloud/models/files_upload_result.py @@ -0,0 +1,170 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class FilesUploadResult(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uploaded': 'list[str]', + 'errors': 'list[Error]' + } + + attribute_map = { + 'uploaded': 'Uploaded', + 'errors': 'Errors' + } + + def __init__(self, uploaded=None, errors=None): + """ + FilesUploadResult - a model defined in Swagger + """ + + self._uploaded = None + self._errors = None + + if uploaded is not None: + self.uploaded = uploaded + if errors is not None: + self.errors = errors + + @property + def uploaded(self): + """ + Gets the uploaded of this FilesUploadResult. + List of uploaded file names + + :return: The uploaded of this FilesUploadResult. + :rtype: list[str] + """ + return self._uploaded + + @uploaded.setter + def uploaded(self, uploaded): + """ + Sets the uploaded of this FilesUploadResult. + List of uploaded file names + + :param uploaded: The uploaded of this FilesUploadResult. + :type: list[str] + """ + + self._uploaded = uploaded + + @property + def errors(self): + """ + Gets the errors of this FilesUploadResult. + List of errors. + + :return: The errors of this FilesUploadResult. + :rtype: list[Error] + """ + return self._errors + + @errors.setter + def errors(self, errors): + """ + Sets the errors of this FilesUploadResult. + List of errors. + + :param errors: The errors of this FilesUploadResult. + :type: list[Error] + """ + + self._errors = errors + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, FilesUploadResult): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/font_encoding_rules.py b/asposepdfcloud/models/font_encoding_rules.py index e25c81f..96c2984 100644 --- a/asposepdfcloud/models/font_encoding_rules.py +++ b/asposepdfcloud/models/font_encoding_rules.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/font_saving_modes.py b/asposepdfcloud/models/font_saving_modes.py index 106fa0d..18bf56b 100644 --- a/asposepdfcloud/models/font_saving_modes.py +++ b/asposepdfcloud/models/font_saving_modes.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/font_styles.py b/asposepdfcloud/models/font_styles.py index 1f388b2..f400d30 100644 --- a/asposepdfcloud/models/font_styles.py +++ b/asposepdfcloud/models/font_styles.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/free_text_annotation.py b/asposepdfcloud/models/free_text_annotation.py index 7c4313e..c250d74 100644 --- a/asposepdfcloud/models/free_text_annotation.py +++ b/asposepdfcloud/models/free_text_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -133,8 +133,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -157,8 +156,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.intent = intent if rotate is not None: self.rotate = rotate - if text_style is not None: - self.text_style = text_style + self.text_style = text_style @property def links(self): @@ -341,6 +339,8 @@ def rect(self, rect): :param rect: The rect of this FreeTextAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -617,6 +617,8 @@ def text_style(self, text_style): :param text_style: The text_style of this FreeTextAnnotation. :type: TextStyle """ + if text_style is None: + raise ValueError("Invalid value for `text_style`, must not be `None`") self._text_style = text_style diff --git a/asposepdfcloud/models/free_text_annotation_response.py b/asposepdfcloud/models/free_text_annotation_response.py index 0ee29d5..938fb5d 100644 --- a/asposepdfcloud/models/free_text_annotation_response.py +++ b/asposepdfcloud/models/free_text_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/free_text_annotations.py b/asposepdfcloud/models/free_text_annotations.py index 8357a08..5fc9acb 100644 --- a/asposepdfcloud/models/free_text_annotations.py +++ b/asposepdfcloud/models/free_text_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/free_text_annotations_response.py b/asposepdfcloud/models/free_text_annotations_response.py index cfba305..7a5fa4a 100644 --- a/asposepdfcloud/models/free_text_annotations_response.py +++ b/asposepdfcloud/models/free_text_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/free_text_intent.py b/asposepdfcloud/models/free_text_intent.py index c667738..3d305e8 100644 --- a/asposepdfcloud/models/free_text_intent.py +++ b/asposepdfcloud/models/free_text_intent.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/graph_info.py b/asposepdfcloud/models/graph_info.py index fa9ecdc..e131f6f 100644 --- a/asposepdfcloud/models/graph_info.py +++ b/asposepdfcloud/models/graph_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -142,7 +142,7 @@ def line_width(self, line_width): def color(self): """ Gets the color of this GraphInfo. - Gets or sets a object that indicates the color of the graph. + Gets or sets a Color object that indicates the color of the graph. :return: The color of this GraphInfo. :rtype: Color @@ -153,7 +153,7 @@ def color(self): def color(self, color): """ Sets the color of this GraphInfo. - Gets or sets a object that indicates the color of the graph. + Gets or sets a Color object that indicates the color of the graph. :param color: The color of this GraphInfo. :type: Color @@ -211,7 +211,7 @@ def dash_phase(self, dash_phase): def fill_color(self): """ Gets the fill_color of this GraphInfo. - Gets or sets a object that indicates the fill color of the graph. + Gets or sets a Color object that indicates the fill color of the graph. :return: The fill_color of this GraphInfo. :rtype: Color @@ -222,7 +222,7 @@ def fill_color(self): def fill_color(self, fill_color): """ Sets the fill_color of this GraphInfo. - Gets or sets a object that indicates the fill color of the graph. + Gets or sets a Color object that indicates the fill color of the graph. :param fill_color: The fill_color of this GraphInfo. :type: Color diff --git a/asposepdfcloud/models/highlight_annotation.py b/asposepdfcloud/models/highlight_annotation.py index 37d8e6f..c0b2601 100644 --- a/asposepdfcloud/models/highlight_annotation.py +++ b/asposepdfcloud/models/highlight_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -124,8 +124,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -326,6 +325,8 @@ def rect(self, rect): :param rect: The rect of this HighlightAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/highlight_annotation_response.py b/asposepdfcloud/models/highlight_annotation_response.py index 106da65..6ca6f57 100644 --- a/asposepdfcloud/models/highlight_annotation_response.py +++ b/asposepdfcloud/models/highlight_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/highlight_annotations.py b/asposepdfcloud/models/highlight_annotations.py index 2c040d0..0a50313 100644 --- a/asposepdfcloud/models/highlight_annotations.py +++ b/asposepdfcloud/models/highlight_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/highlight_annotations_response.py b/asposepdfcloud/models/highlight_annotations_response.py index fb4890b..f6c6d3d 100644 --- a/asposepdfcloud/models/highlight_annotations_response.py +++ b/asposepdfcloud/models/highlight_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/horizontal_alignment.py b/asposepdfcloud/models/horizontal_alignment.py index 79aa0aa..70d6dbc 100644 --- a/asposepdfcloud/models/horizontal_alignment.py +++ b/asposepdfcloud/models/horizontal_alignment.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/html_document_type.py b/asposepdfcloud/models/html_document_type.py index b4c949a..3107254 100644 --- a/asposepdfcloud/models/html_document_type.py +++ b/asposepdfcloud/models/html_document_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/html_markup_generation_modes.py b/asposepdfcloud/models/html_markup_generation_modes.py index 50b0201..ed8baa5 100644 --- a/asposepdfcloud/models/html_markup_generation_modes.py +++ b/asposepdfcloud/models/html_markup_generation_modes.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/image.py b/asposepdfcloud/models/image.py index 6f4f96b..03f9bf1 100644 --- a/asposepdfcloud/models/image.py +++ b/asposepdfcloud/models/image.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -79,16 +79,13 @@ def __init__(self, links=None, width=None, height=None, id=None, rectangle=None, if links is not None: self.links = links - if width is not None: - self.width = width - if height is not None: - self.height = height + self.width = width + self.height = height if id is not None: self.id = id if rectangle is not None: self.rectangle = rectangle - if page_number is not None: - self.page_number = page_number + self.page_number = page_number @property def links(self): @@ -133,6 +130,8 @@ def width(self, width): :param width: The width of this Image. :type: int """ + if width is None: + raise ValueError("Invalid value for `width`, must not be `None`") self._width = width @@ -156,6 +155,8 @@ def height(self, height): :param height: The height of this Image. :type: int """ + if height is None: + raise ValueError("Invalid value for `height`, must not be `None`") self._height = height @@ -225,6 +226,8 @@ def page_number(self, page_number): :param page_number: The page_number of this Image. :type: int """ + if page_number is None: + raise ValueError("Invalid value for `page_number`, must not be `None`") self._page_number = page_number diff --git a/asposepdfcloud/models/image_footer.py b/asposepdfcloud/models/image_footer.py index 1023677..3dd1197 100644 --- a/asposepdfcloud/models/image_footer.py +++ b/asposepdfcloud/models/image_footer.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -231,7 +231,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this ImageFooter. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this ImageFooter. :rtype: Rotation @@ -242,7 +242,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this ImageFooter. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this ImageFooter. :type: Rotation diff --git a/asposepdfcloud/models/image_header.py b/asposepdfcloud/models/image_header.py index 1045ec7..3d635a4 100644 --- a/asposepdfcloud/models/image_header.py +++ b/asposepdfcloud/models/image_header.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -231,7 +231,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this ImageHeader. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this ImageHeader. :rtype: Rotation @@ -242,7 +242,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this ImageHeader. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this ImageHeader. :type: Rotation diff --git a/asposepdfcloud/models/image_response.py b/asposepdfcloud/models/image_response.py index 6f556a0..1ab49a1 100644 --- a/asposepdfcloud/models/image_response.py +++ b/asposepdfcloud/models/image_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/image_src_type.py b/asposepdfcloud/models/image_src_type.py index 1896c91..427d551 100644 --- a/asposepdfcloud/models/image_src_type.py +++ b/asposepdfcloud/models/image_src_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/image_stamp.py b/asposepdfcloud/models/image_stamp.py index 157a24b..a1feb6e 100644 --- a/asposepdfcloud/models/image_stamp.py +++ b/asposepdfcloud/models/image_stamp.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -241,7 +241,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this ImageStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this ImageStamp. :rtype: Rotation @@ -252,7 +252,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this ImageStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this ImageStamp. :type: Rotation diff --git a/asposepdfcloud/models/image_template.py b/asposepdfcloud/models/image_template.py index 8155d90..866fa82 100644 --- a/asposepdfcloud/models/image_template.py +++ b/asposepdfcloud/models/image_template.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -125,6 +125,8 @@ def image_path(self, image_path): """ if image_path is None: raise ValueError("Invalid value for `image_path`, must not be `None`") + if image_path is not None and len(image_path) < 1: + raise ValueError("Invalid value for `image_path`, length must be greater than or equal to `1`") self._image_path = image_path diff --git a/asposepdfcloud/models/image_templates_request.py b/asposepdfcloud/models/image_templates_request.py index 2d3c201..0ccdf47 100644 --- a/asposepdfcloud/models/image_templates_request.py +++ b/asposepdfcloud/models/image_templates_request.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/images.py b/asposepdfcloud/models/images.py index af30625..b6fc450 100644 --- a/asposepdfcloud/models/images.py +++ b/asposepdfcloud/models/images.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/images_response.py b/asposepdfcloud/models/images_response.py index 0b9acf8..8c0e4f2 100644 --- a/asposepdfcloud/models/images_response.py +++ b/asposepdfcloud/models/images_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/ink_annotation.py b/asposepdfcloud/models/ink_annotation.py index 97fa73b..2c06c68 100644 --- a/asposepdfcloud/models/ink_annotation.py +++ b/asposepdfcloud/models/ink_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -127,8 +127,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -331,6 +330,8 @@ def rect(self, rect): :param rect: The rect of this InkAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/ink_annotation_response.py b/asposepdfcloud/models/ink_annotation_response.py index 2cb6623..6aea017 100644 --- a/asposepdfcloud/models/ink_annotation_response.py +++ b/asposepdfcloud/models/ink_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/ink_annotations.py b/asposepdfcloud/models/ink_annotations.py index a8015f7..a6f3b9e 100644 --- a/asposepdfcloud/models/ink_annotations.py +++ b/asposepdfcloud/models/ink_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/ink_annotations_response.py b/asposepdfcloud/models/ink_annotations_response.py index 12ab1f3..8703013 100644 --- a/asposepdfcloud/models/ink_annotations_response.py +++ b/asposepdfcloud/models/ink_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/justification.py b/asposepdfcloud/models/justification.py index d0b1917..edd5413 100644 --- a/asposepdfcloud/models/justification.py +++ b/asposepdfcloud/models/justification.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/letters_positioning_methods.py b/asposepdfcloud/models/letters_positioning_methods.py index 5b4f0f1..e8da4d5 100644 --- a/asposepdfcloud/models/letters_positioning_methods.py +++ b/asposepdfcloud/models/letters_positioning_methods.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/line_annotation.py b/asposepdfcloud/models/line_annotation.py index 91c2a5e..89a42f7 100644 --- a/asposepdfcloud/models/line_annotation.py +++ b/asposepdfcloud/models/line_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -157,8 +157,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -175,12 +174,10 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.title = title if rich_text is not None: self.rich_text = rich_text - if starting is not None: - self.starting = starting + self.starting = starting if starting_style is not None: self.starting_style = starting_style - if ending is not None: - self.ending = ending + self.ending = ending if ending_style is not None: self.ending_style = ending_style if interior_color is not None: @@ -381,6 +378,8 @@ def rect(self, rect): :param rect: The rect of this LineAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -588,6 +587,8 @@ def starting(self, starting): :param starting: The starting of this LineAnnotation. :type: Point """ + if starting is None: + raise ValueError("Invalid value for `starting`, must not be `None`") self._starting = starting @@ -634,6 +635,8 @@ def ending(self, ending): :param ending: The ending of this LineAnnotation. :type: Point """ + if ending is None: + raise ValueError("Invalid value for `ending`, must not be `None`") self._ending = ending diff --git a/asposepdfcloud/models/line_annotation_response.py b/asposepdfcloud/models/line_annotation_response.py index a6caacb..ce477db 100644 --- a/asposepdfcloud/models/line_annotation_response.py +++ b/asposepdfcloud/models/line_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/line_annotations.py b/asposepdfcloud/models/line_annotations.py index a3f1dfb..a600b6b 100644 --- a/asposepdfcloud/models/line_annotations.py +++ b/asposepdfcloud/models/line_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/line_annotations_response.py b/asposepdfcloud/models/line_annotations_response.py index b1281ca..e01dac0 100644 --- a/asposepdfcloud/models/line_annotations_response.py +++ b/asposepdfcloud/models/line_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/line_ending.py b/asposepdfcloud/models/line_ending.py index 7a73f0b..d42e164 100644 --- a/asposepdfcloud/models/line_ending.py +++ b/asposepdfcloud/models/line_ending.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/line_intent.py b/asposepdfcloud/models/line_intent.py index 8df9fc0..b65d5b7 100644 --- a/asposepdfcloud/models/line_intent.py +++ b/asposepdfcloud/models/line_intent.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/line_spacing.py b/asposepdfcloud/models/line_spacing.py index 25e4001..33c66bd 100644 --- a/asposepdfcloud/models/line_spacing.py +++ b/asposepdfcloud/models/line_spacing.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link.py b/asposepdfcloud/models/link.py index 498e235..8cd4780 100644 --- a/asposepdfcloud/models/link.py +++ b/asposepdfcloud/models/link.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link_action_type.py b/asposepdfcloud/models/link_action_type.py index 408ff36..e6b2db6 100644 --- a/asposepdfcloud/models/link_action_type.py +++ b/asposepdfcloud/models/link_action_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link_annotation.py b/asposepdfcloud/models/link_annotation.py index 5158dfa..9fb422b 100644 --- a/asposepdfcloud/models/link_annotation.py +++ b/asposepdfcloud/models/link_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -82,16 +82,12 @@ def __init__(self, links=None, action_type=None, action=None, highlighting=None, if links is not None: self.links = links - if action_type is not None: - self.action_type = action_type - if action is not None: - self.action = action - if highlighting is not None: - self.highlighting = highlighting + self.action_type = action_type + self.action = action + self.highlighting = highlighting if color is not None: self.color = color - if rect is not None: - self.rect = rect + self.rect = rect if id is not None: self.id = id @@ -136,6 +132,8 @@ def action_type(self, action_type): :param action_type: The action_type of this LinkAnnotation. :type: LinkActionType """ + if action_type is None: + raise ValueError("Invalid value for `action_type`, must not be `None`") self._action_type = action_type @@ -157,6 +155,10 @@ def action(self, action): :param action: The action of this LinkAnnotation. :type: str """ + if action is None: + raise ValueError("Invalid value for `action`, must not be `None`") + if action is not None and len(action) < 1: + raise ValueError("Invalid value for `action`, length must be greater than or equal to `1`") self._action = action @@ -178,6 +180,8 @@ def highlighting(self, highlighting): :param highlighting: The highlighting of this LinkAnnotation. :type: LinkHighlightingMode """ + if highlighting is None: + raise ValueError("Invalid value for `highlighting`, must not be `None`") self._highlighting = highlighting @@ -220,6 +224,8 @@ def rect(self, rect): :param rect: The rect of this LinkAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/link_annotation_response.py b/asposepdfcloud/models/link_annotation_response.py index 1eb5803..a75ce40 100644 --- a/asposepdfcloud/models/link_annotation_response.py +++ b/asposepdfcloud/models/link_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link_annotations.py b/asposepdfcloud/models/link_annotations.py index fa7c2da..f95dde8 100644 --- a/asposepdfcloud/models/link_annotations.py +++ b/asposepdfcloud/models/link_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link_annotations_response.py b/asposepdfcloud/models/link_annotations_response.py index 83703e7..bc6292f 100644 --- a/asposepdfcloud/models/link_annotations_response.py +++ b/asposepdfcloud/models/link_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link_element.py b/asposepdfcloud/models/link_element.py index c858df0..067e16a 100644 --- a/asposepdfcloud/models/link_element.py +++ b/asposepdfcloud/models/link_element.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/link_highlighting_mode.py b/asposepdfcloud/models/link_highlighting_mode.py index 929d6d7..fe7b326 100644 --- a/asposepdfcloud/models/link_highlighting_mode.py +++ b/asposepdfcloud/models/link_highlighting_mode.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/margin_info.py b/asposepdfcloud/models/margin_info.py index 3245d01..6d18e84 100644 --- a/asposepdfcloud/models/margin_info.py +++ b/asposepdfcloud/models/margin_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/markup_annotation.py b/asposepdfcloud/models/markup_annotation.py index e463065..951da6e 100644 --- a/asposepdfcloud/models/markup_annotation.py +++ b/asposepdfcloud/models/markup_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -121,8 +121,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -321,6 +320,8 @@ def rect(self, rect): :param rect: The rect of this MarkupAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/merge_documents.py b/asposepdfcloud/models/merge_documents.py index c3ecaaf..41331bf 100644 --- a/asposepdfcloud/models/merge_documents.py +++ b/asposepdfcloud/models/merge_documents.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/movie_annotation.py b/asposepdfcloud/models/movie_annotation.py index 15bbf06..3012718 100644 --- a/asposepdfcloud/models/movie_annotation.py +++ b/asposepdfcloud/models/movie_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -118,8 +118,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -316,6 +315,8 @@ def rect(self, rect): :param rect: The rect of this MovieAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/movie_annotation_response.py b/asposepdfcloud/models/movie_annotation_response.py index f964991..5f07e8d 100644 --- a/asposepdfcloud/models/movie_annotation_response.py +++ b/asposepdfcloud/models/movie_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/movie_annotations.py b/asposepdfcloud/models/movie_annotations.py index 3254e74..853820f 100644 --- a/asposepdfcloud/models/movie_annotations.py +++ b/asposepdfcloud/models/movie_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/movie_annotations_response.py b/asposepdfcloud/models/movie_annotations_response.py index 6cb5464..a3796ed 100644 --- a/asposepdfcloud/models/movie_annotations_response.py +++ b/asposepdfcloud/models/movie_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/object_exist.py b/asposepdfcloud/models/object_exist.py new file mode 100644 index 0000000..d2ca4a0 --- /dev/null +++ b/asposepdfcloud/models/object_exist.py @@ -0,0 +1,172 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class ObjectExist(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'exists': 'bool', + 'is_folder': 'bool' + } + + attribute_map = { + 'exists': 'Exists', + 'is_folder': 'IsFolder' + } + + def __init__(self, exists=None, is_folder=None): + """ + ObjectExist - a model defined in Swagger + """ + + self._exists = None + self._is_folder = None + + self.exists = exists + self.is_folder = is_folder + + @property + def exists(self): + """ + Gets the exists of this ObjectExist. + Indicates that the file or folder exists. + + :return: The exists of this ObjectExist. + :rtype: bool + """ + return self._exists + + @exists.setter + def exists(self, exists): + """ + Sets the exists of this ObjectExist. + Indicates that the file or folder exists. + + :param exists: The exists of this ObjectExist. + :type: bool + """ + if exists is None: + raise ValueError("Invalid value for `exists`, must not be `None`") + + self._exists = exists + + @property + def is_folder(self): + """ + Gets the is_folder of this ObjectExist. + True if it is a folder, false if it is a file. + + :return: The is_folder of this ObjectExist. + :rtype: bool + """ + return self._is_folder + + @is_folder.setter + def is_folder(self, is_folder): + """ + Sets the is_folder of this ObjectExist. + True if it is a folder, false if it is a file. + + :param is_folder: The is_folder of this ObjectExist. + :type: bool + """ + if is_folder is None: + raise ValueError("Invalid value for `is_folder`, must not be `None`") + + self._is_folder = is_folder + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, ObjectExist): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/optimize_options.py b/asposepdfcloud/models/optimize_options.py index cf8305a..ea35f61 100644 --- a/asposepdfcloud/models/optimize_options.py +++ b/asposepdfcloud/models/optimize_options.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/page.py b/asposepdfcloud/models/page.py index 6cda571..b1383f0 100644 --- a/asposepdfcloud/models/page.py +++ b/asposepdfcloud/models/page.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -73,8 +73,7 @@ def __init__(self, links=None, id=None, images=None, rectangle=None): if links is not None: self.links = links - if id is not None: - self.id = id + self.id = id if images is not None: self.images = images if rectangle is not None: @@ -123,6 +122,8 @@ def id(self, id): :param id: The id of this Page. :type: int """ + if id is None: + raise ValueError("Invalid value for `id`, must not be `None`") self._id = id diff --git a/asposepdfcloud/models/page_number_stamp.py b/asposepdfcloud/models/page_number_stamp.py index 4aaf1b0..872a531 100644 --- a/asposepdfcloud/models/page_number_stamp.py +++ b/asposepdfcloud/models/page_number_stamp.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -236,7 +236,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this PageNumberStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this PageNumberStamp. :rtype: Rotation @@ -247,7 +247,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this PageNumberStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this PageNumberStamp. :type: Rotation diff --git a/asposepdfcloud/models/page_word_count.py b/asposepdfcloud/models/page_word_count.py index 4419230..9e3662d 100644 --- a/asposepdfcloud/models/page_word_count.py +++ b/asposepdfcloud/models/page_word_count.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/pages.py b/asposepdfcloud/models/pages.py index b572260..7e3647d 100644 --- a/asposepdfcloud/models/pages.py +++ b/asposepdfcloud/models/pages.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/paragraph.py b/asposepdfcloud/models/paragraph.py index 6b8d8bf..bc9eb52 100644 --- a/asposepdfcloud/models/paragraph.py +++ b/asposepdfcloud/models/paragraph.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/parts_embedding_modes.py b/asposepdfcloud/models/parts_embedding_modes.py index 05875a1..f406517 100644 --- a/asposepdfcloud/models/parts_embedding_modes.py +++ b/asposepdfcloud/models/parts_embedding_modes.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/pdf_a_type.py b/asposepdfcloud/models/pdf_a_type.py index 4932868..6978f8e 100644 --- a/asposepdfcloud/models/pdf_a_type.py +++ b/asposepdfcloud/models/pdf_a_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/pdf_page_stamp.py b/asposepdfcloud/models/pdf_page_stamp.py index c58f6b4..14efdab 100644 --- a/asposepdfcloud/models/pdf_page_stamp.py +++ b/asposepdfcloud/models/pdf_page_stamp.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -236,7 +236,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this PdfPageStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this PdfPageStamp. :rtype: Rotation @@ -247,7 +247,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this PdfPageStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this PdfPageStamp. :type: Rotation diff --git a/asposepdfcloud/models/permissions_flags.py b/asposepdfcloud/models/permissions_flags.py index 099c2c4..30137aa 100644 --- a/asposepdfcloud/models/permissions_flags.py +++ b/asposepdfcloud/models/permissions_flags.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/point.py b/asposepdfcloud/models/point.py index a0105e6..4bc39b3 100644 --- a/asposepdfcloud/models/point.py +++ b/asposepdfcloud/models/point.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/poly_annotation.py b/asposepdfcloud/models/poly_annotation.py index ba87ce8..57e04f9 100644 --- a/asposepdfcloud/models/poly_annotation.py +++ b/asposepdfcloud/models/poly_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -136,8 +136,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -162,8 +161,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.ending_style = ending_style if intent is not None: self.intent = intent - if vertices is not None: - self.vertices = vertices + self.vertices = vertices @property def links(self): @@ -346,6 +344,8 @@ def rect(self, rect): :param rect: The rect of this PolyAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -645,6 +645,8 @@ def vertices(self, vertices): :param vertices: The vertices of this PolyAnnotation. :type: list[Point] """ + if vertices is None: + raise ValueError("Invalid value for `vertices`, must not be `None`") self._vertices = vertices diff --git a/asposepdfcloud/models/poly_intent.py b/asposepdfcloud/models/poly_intent.py index 5fcbf08..5f14462 100644 --- a/asposepdfcloud/models/poly_intent.py +++ b/asposepdfcloud/models/poly_intent.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/poly_line_annotation.py b/asposepdfcloud/models/poly_line_annotation.py index 91cb8fd..11bbc6b 100644 --- a/asposepdfcloud/models/poly_line_annotation.py +++ b/asposepdfcloud/models/poly_line_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -136,8 +136,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -162,8 +161,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.ending_style = ending_style if intent is not None: self.intent = intent - if vertices is not None: - self.vertices = vertices + self.vertices = vertices @property def links(self): @@ -346,6 +344,8 @@ def rect(self, rect): :param rect: The rect of this PolyLineAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -645,6 +645,8 @@ def vertices(self, vertices): :param vertices: The vertices of this PolyLineAnnotation. :type: list[Point] """ + if vertices is None: + raise ValueError("Invalid value for `vertices`, must not be `None`") self._vertices = vertices diff --git a/asposepdfcloud/models/poly_line_annotation_response.py b/asposepdfcloud/models/poly_line_annotation_response.py index 221d396..420cc8a 100644 --- a/asposepdfcloud/models/poly_line_annotation_response.py +++ b/asposepdfcloud/models/poly_line_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/poly_line_annotations.py b/asposepdfcloud/models/poly_line_annotations.py index 63fa719..28f3705 100644 --- a/asposepdfcloud/models/poly_line_annotations.py +++ b/asposepdfcloud/models/poly_line_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/poly_line_annotations_response.py b/asposepdfcloud/models/poly_line_annotations_response.py index bf44f68..9906024 100644 --- a/asposepdfcloud/models/poly_line_annotations_response.py +++ b/asposepdfcloud/models/poly_line_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/polygon_annotation.py b/asposepdfcloud/models/polygon_annotation.py index 57486b1..aa176e6 100644 --- a/asposepdfcloud/models/polygon_annotation.py +++ b/asposepdfcloud/models/polygon_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -136,8 +136,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -162,8 +161,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.ending_style = ending_style if intent is not None: self.intent = intent - if vertices is not None: - self.vertices = vertices + self.vertices = vertices @property def links(self): @@ -346,6 +344,8 @@ def rect(self, rect): :param rect: The rect of this PolygonAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -645,6 +645,8 @@ def vertices(self, vertices): :param vertices: The vertices of this PolygonAnnotation. :type: list[Point] """ + if vertices is None: + raise ValueError("Invalid value for `vertices`, must not be `None`") self._vertices = vertices diff --git a/asposepdfcloud/models/polygon_annotation_response.py b/asposepdfcloud/models/polygon_annotation_response.py index 735ec24..5e179bf 100644 --- a/asposepdfcloud/models/polygon_annotation_response.py +++ b/asposepdfcloud/models/polygon_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/polygon_annotations.py b/asposepdfcloud/models/polygon_annotations.py index d53e7ba..da55e71 100644 --- a/asposepdfcloud/models/polygon_annotations.py +++ b/asposepdfcloud/models/polygon_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/polygon_annotations_response.py b/asposepdfcloud/models/polygon_annotations_response.py index 4404af5..c361967 100644 --- a/asposepdfcloud/models/polygon_annotations_response.py +++ b/asposepdfcloud/models/polygon_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/popup_annotation.py b/asposepdfcloud/models/popup_annotation.py index c4a297b..5e87436 100644 --- a/asposepdfcloud/models/popup_annotation.py +++ b/asposepdfcloud/models/popup_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -112,8 +112,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -306,6 +305,8 @@ def rect(self, rect): :param rect: The rect of this PopupAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/popup_annotation_response.py b/asposepdfcloud/models/popup_annotation_response.py index ed5fc69..22bc944 100644 --- a/asposepdfcloud/models/popup_annotation_response.py +++ b/asposepdfcloud/models/popup_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/popup_annotation_with_parent.py b/asposepdfcloud/models/popup_annotation_with_parent.py index 30538da..a5c6f5f 100644 --- a/asposepdfcloud/models/popup_annotation_with_parent.py +++ b/asposepdfcloud/models/popup_annotation_with_parent.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -115,8 +115,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -311,6 +310,8 @@ def rect(self, rect): :param rect: The rect of this PopupAnnotationWithParent. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/popup_annotations.py b/asposepdfcloud/models/popup_annotations.py index 0498dce..ce67d37 100644 --- a/asposepdfcloud/models/popup_annotations.py +++ b/asposepdfcloud/models/popup_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/popup_annotations_response.py b/asposepdfcloud/models/popup_annotations_response.py index 06fa2d6..fae735f 100644 --- a/asposepdfcloud/models/popup_annotations_response.py +++ b/asposepdfcloud/models/popup_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/position.py b/asposepdfcloud/models/position.py index cdc80c2..4c19ad6 100644 --- a/asposepdfcloud/models/position.py +++ b/asposepdfcloud/models/position.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/raster_images_saving_modes.py b/asposepdfcloud/models/raster_images_saving_modes.py index 758a7dc..958bc37 100644 --- a/asposepdfcloud/models/raster_images_saving_modes.py +++ b/asposepdfcloud/models/raster_images_saving_modes.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/rectangle.py b/asposepdfcloud/models/rectangle.py index ab6ea01..95f9a09 100644 --- a/asposepdfcloud/models/rectangle.py +++ b/asposepdfcloud/models/rectangle.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/redaction_annotation.py b/asposepdfcloud/models/redaction_annotation.py index 862208d..5f3e34e 100644 --- a/asposepdfcloud/models/redaction_annotation.py +++ b/asposepdfcloud/models/redaction_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -127,8 +127,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -331,6 +330,8 @@ def rect(self, rect): :param rect: The rect of this RedactionAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/redaction_annotation_response.py b/asposepdfcloud/models/redaction_annotation_response.py index 0c759f7..1ed020d 100644 --- a/asposepdfcloud/models/redaction_annotation_response.py +++ b/asposepdfcloud/models/redaction_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/redaction_annotations.py b/asposepdfcloud/models/redaction_annotations.py index 0e6dcee..1ca9a7b 100644 --- a/asposepdfcloud/models/redaction_annotations.py +++ b/asposepdfcloud/models/redaction_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/redaction_annotations_response.py b/asposepdfcloud/models/redaction_annotations_response.py index 34101b6..26956c2 100644 --- a/asposepdfcloud/models/redaction_annotations_response.py +++ b/asposepdfcloud/models/redaction_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/rotation.py b/asposepdfcloud/models/rotation.py index a0e258f..4b30e4a 100644 --- a/asposepdfcloud/models/rotation.py +++ b/asposepdfcloud/models/rotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/row.py b/asposepdfcloud/models/row.py index 5a04dc8..3c02a31 100644 --- a/asposepdfcloud/models/row.py +++ b/asposepdfcloud/models/row.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/row_recognized.py b/asposepdfcloud/models/row_recognized.py index fabacf0..2e92ef7 100644 --- a/asposepdfcloud/models/row_recognized.py +++ b/asposepdfcloud/models/row_recognized.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/screen_annotation.py b/asposepdfcloud/models/screen_annotation.py index 42f788e..154a674 100644 --- a/asposepdfcloud/models/screen_annotation.py +++ b/asposepdfcloud/models/screen_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -115,8 +115,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -311,6 +310,8 @@ def rect(self, rect): :param rect: The rect of this ScreenAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/screen_annotation_response.py b/asposepdfcloud/models/screen_annotation_response.py index 1fd24c3..903f78c 100644 --- a/asposepdfcloud/models/screen_annotation_response.py +++ b/asposepdfcloud/models/screen_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/screen_annotations.py b/asposepdfcloud/models/screen_annotations.py index b48f28e..6bf67bc 100644 --- a/asposepdfcloud/models/screen_annotations.py +++ b/asposepdfcloud/models/screen_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/screen_annotations_response.py b/asposepdfcloud/models/screen_annotations_response.py index c25524c..62fedb2 100644 --- a/asposepdfcloud/models/screen_annotations_response.py +++ b/asposepdfcloud/models/screen_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/segment.py b/asposepdfcloud/models/segment.py index 3ff76f7..bcde398 100644 --- a/asposepdfcloud/models/segment.py +++ b/asposepdfcloud/models/segment.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -91,6 +91,8 @@ def value(self, value): """ if value is None: raise ValueError("Invalid value for `value`, must not be `None`") + if value is not None and len(value) < 1: + raise ValueError("Invalid value for `value`, length must be greater than or equal to `1`") self._value = value diff --git a/asposepdfcloud/models/shape_type.py b/asposepdfcloud/models/shape_type.py index 524e6b1..bdfe415 100644 --- a/asposepdfcloud/models/shape_type.py +++ b/asposepdfcloud/models/shape_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/signature.py b/asposepdfcloud/models/signature.py index cd17ed7..2ce630e 100644 --- a/asposepdfcloud/models/signature.py +++ b/asposepdfcloud/models/signature.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -143,6 +143,8 @@ def signature_path(self, signature_path): """ if signature_path is None: raise ValueError("Invalid value for `signature_path`, must not be `None`") + if signature_path is not None and len(signature_path) < 1: + raise ValueError("Invalid value for `signature_path`, length must be greater than or equal to `1`") self._signature_path = signature_path @@ -290,7 +292,7 @@ def location(self, location): def visible(self): """ Gets the visible of this Signature. - Gets or sets a value indicating whether this is visible. Supports only when signing particular page. + Gets or sets a value indicating whether this Signature is visible. Supports only when signing particular page. :return: The visible of this Signature. :rtype: bool @@ -301,7 +303,7 @@ def visible(self): def visible(self, visible): """ Sets the visible of this Signature. - Gets or sets a value indicating whether this is visible. Supports only when signing particular page. + Gets or sets a value indicating whether this Signature is visible. Supports only when signing particular page. :param visible: The visible of this Signature. :type: bool diff --git a/asposepdfcloud/models/signature_type.py b/asposepdfcloud/models/signature_type.py index 80f8c7b..9f46003 100644 --- a/asposepdfcloud/models/signature_type.py +++ b/asposepdfcloud/models/signature_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/signature_verify_response.py b/asposepdfcloud/models/signature_verify_response.py index 21b58bf..61ea36c 100644 --- a/asposepdfcloud/models/signature_verify_response.py +++ b/asposepdfcloud/models/signature_verify_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -71,8 +71,7 @@ def __init__(self, code=None, status=None, valid=None): self.code = code if status is not None: self.status = status - if valid is not None: - self.valid = valid + self.valid = valid @property def code(self): @@ -142,6 +141,8 @@ def valid(self, valid): :param valid: The valid of this SignatureVerifyResponse. :type: bool """ + if valid is None: + raise ValueError("Invalid value for `valid`, must not be `None`") self._valid = valid diff --git a/asposepdfcloud/models/sound_annotation.py b/asposepdfcloud/models/sound_annotation.py index 1af51a1..6ebda20 100644 --- a/asposepdfcloud/models/sound_annotation.py +++ b/asposepdfcloud/models/sound_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -139,8 +139,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -157,8 +156,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.title = title if rich_text is not None: self.rich_text = rich_text - if file_path is not None: - self.file_path = file_path + self.file_path = file_path if icon is not None: self.icon = icon if rate is not None: @@ -351,6 +349,8 @@ def rect(self, rect): :param rect: The rect of this SoundAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect @@ -558,7 +558,6 @@ def file_path(self, file_path): :param file_path: The file_path of this SoundAnnotation. :type: str """ - self._file_path = file_path @property diff --git a/asposepdfcloud/models/sound_annotation_response.py b/asposepdfcloud/models/sound_annotation_response.py index 08688da..75df22b 100644 --- a/asposepdfcloud/models/sound_annotation_response.py +++ b/asposepdfcloud/models/sound_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/sound_annotations.py b/asposepdfcloud/models/sound_annotations.py index e0a252d..aa23682 100644 --- a/asposepdfcloud/models/sound_annotations.py +++ b/asposepdfcloud/models/sound_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/sound_annotations_response.py b/asposepdfcloud/models/sound_annotations_response.py index 748a9e1..f3268bc 100644 --- a/asposepdfcloud/models/sound_annotations_response.py +++ b/asposepdfcloud/models/sound_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/sound_encoding.py b/asposepdfcloud/models/sound_encoding.py index 8aba806..792945e 100644 --- a/asposepdfcloud/models/sound_encoding.py +++ b/asposepdfcloud/models/sound_encoding.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/sound_icon.py b/asposepdfcloud/models/sound_icon.py index be4195d..cc95e74 100644 --- a/asposepdfcloud/models/sound_icon.py +++ b/asposepdfcloud/models/sound_icon.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/split_result.py b/asposepdfcloud/models/split_result.py index 32eaf23..d5d057f 100644 --- a/asposepdfcloud/models/split_result.py +++ b/asposepdfcloud/models/split_result.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/split_result_document.py b/asposepdfcloud/models/split_result_document.py index 931a53f..a1c423f 100644 --- a/asposepdfcloud/models/split_result_document.py +++ b/asposepdfcloud/models/split_result_document.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -82,8 +82,7 @@ def __init__(self, href=None, rel=None, type=None, title=None, id=None): self.type = type if title is not None: self.title = title - if id is not None: - self.id = id + self.id = id @property def href(self): @@ -197,6 +196,8 @@ def id(self, id): :param id: The id of this SplitResultDocument. :type: int """ + if id is None: + raise ValueError("Invalid value for `id`, must not be `None`") self._id = id diff --git a/asposepdfcloud/models/split_result_response.py b/asposepdfcloud/models/split_result_response.py index 8302755..da3f8e3 100644 --- a/asposepdfcloud/models/split_result_response.py +++ b/asposepdfcloud/models/split_result_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/square_annotation.py b/asposepdfcloud/models/square_annotation.py index 901589b..a4f3eb2 100644 --- a/asposepdfcloud/models/square_annotation.py +++ b/asposepdfcloud/models/square_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -127,8 +127,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -331,6 +330,8 @@ def rect(self, rect): :param rect: The rect of this SquareAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/square_annotation_response.py b/asposepdfcloud/models/square_annotation_response.py index b96957c..04821e9 100644 --- a/asposepdfcloud/models/square_annotation_response.py +++ b/asposepdfcloud/models/square_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/square_annotations.py b/asposepdfcloud/models/square_annotations.py index d5be719..7967092 100644 --- a/asposepdfcloud/models/square_annotations.py +++ b/asposepdfcloud/models/square_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/square_annotations_response.py b/asposepdfcloud/models/square_annotations_response.py index 063a508..15dbd2c 100644 --- a/asposepdfcloud/models/square_annotations_response.py +++ b/asposepdfcloud/models/square_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/squiggly_annotation.py b/asposepdfcloud/models/squiggly_annotation.py index 28ddbb5..5c9ca17 100644 --- a/asposepdfcloud/models/squiggly_annotation.py +++ b/asposepdfcloud/models/squiggly_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -124,8 +124,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -326,6 +325,8 @@ def rect(self, rect): :param rect: The rect of this SquigglyAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/squiggly_annotation_response.py b/asposepdfcloud/models/squiggly_annotation_response.py index 3b3cdc5..6a6f742 100644 --- a/asposepdfcloud/models/squiggly_annotation_response.py +++ b/asposepdfcloud/models/squiggly_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/squiggly_annotations.py b/asposepdfcloud/models/squiggly_annotations.py index a14df9a..02d3795 100644 --- a/asposepdfcloud/models/squiggly_annotations.py +++ b/asposepdfcloud/models/squiggly_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/squiggly_annotations_response.py b/asposepdfcloud/models/squiggly_annotations_response.py index 165e253..5204064 100644 --- a/asposepdfcloud/models/squiggly_annotations_response.py +++ b/asposepdfcloud/models/squiggly_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamp.py b/asposepdfcloud/models/stamp.py index f3038ff..a99f279 100644 --- a/asposepdfcloud/models/stamp.py +++ b/asposepdfcloud/models/stamp.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -336,7 +336,7 @@ def right_margin(self, right_margin): def rotate(self): """ Gets the rotate of this Stamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this Stamp. :rtype: Rotation @@ -347,7 +347,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this Stamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this Stamp. :type: Rotation @@ -543,7 +543,7 @@ def value(self, value): def text_state(self): """ Gets the text_state of this Stamp. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :return: The text_state of this Stamp. :rtype: TextState @@ -554,7 +554,7 @@ def text_state(self): def text_state(self, text_state): """ Sets the text_state of this Stamp. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :param text_state: The text_state of this Stamp. :type: TextState diff --git a/asposepdfcloud/models/stamp_annotation.py b/asposepdfcloud/models/stamp_annotation.py index ad5101e..c62e1bd 100644 --- a/asposepdfcloud/models/stamp_annotation.py +++ b/asposepdfcloud/models/stamp_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -130,8 +130,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -336,6 +335,8 @@ def rect(self, rect): :param rect: The rect of this StampAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/stamp_annotation_response.py b/asposepdfcloud/models/stamp_annotation_response.py index 894edad..626a22b 100644 --- a/asposepdfcloud/models/stamp_annotation_response.py +++ b/asposepdfcloud/models/stamp_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamp_annotations.py b/asposepdfcloud/models/stamp_annotations.py index 745d490..905bb28 100644 --- a/asposepdfcloud/models/stamp_annotations.py +++ b/asposepdfcloud/models/stamp_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamp_annotations_response.py b/asposepdfcloud/models/stamp_annotations_response.py index 1589bbb..5a6b486 100644 --- a/asposepdfcloud/models/stamp_annotations_response.py +++ b/asposepdfcloud/models/stamp_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamp_base.py b/asposepdfcloud/models/stamp_base.py index b641f9d..43fd449 100644 --- a/asposepdfcloud/models/stamp_base.py +++ b/asposepdfcloud/models/stamp_base.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -201,7 +201,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this StampBase. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this StampBase. :rtype: Rotation @@ -212,7 +212,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this StampBase. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this StampBase. :type: Rotation diff --git a/asposepdfcloud/models/stamp_icon.py b/asposepdfcloud/models/stamp_icon.py index 03cac0e..4567a4c 100644 --- a/asposepdfcloud/models/stamp_icon.py +++ b/asposepdfcloud/models/stamp_icon.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamp_info.py b/asposepdfcloud/models/stamp_info.py index 5fd3bcf..7fe777d 100644 --- a/asposepdfcloud/models/stamp_info.py +++ b/asposepdfcloud/models/stamp_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -97,8 +97,7 @@ def __init__(self, links=None, id=None, index_on_page=None, page_index=None, rec self.text = text if visible is not None: self.visible = visible - if stamp_type is not None: - self.stamp_type = stamp_type + self.stamp_type = stamp_type @property def links(self): @@ -281,6 +280,8 @@ def stamp_type(self, stamp_type): :param stamp_type: The stamp_type of this StampInfo. :type: StampType """ + if stamp_type is None: + raise ValueError("Invalid value for `stamp_type`, must not be `None`") self._stamp_type = stamp_type diff --git a/asposepdfcloud/models/stamp_type.py b/asposepdfcloud/models/stamp_type.py index e672d97..cf67b8b 100644 --- a/asposepdfcloud/models/stamp_type.py +++ b/asposepdfcloud/models/stamp_type.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamps_info.py b/asposepdfcloud/models/stamps_info.py index 69523e7..61372ab 100644 --- a/asposepdfcloud/models/stamps_info.py +++ b/asposepdfcloud/models/stamps_info.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/stamps_info_response.py b/asposepdfcloud/models/stamps_info_response.py index 6b2744f..7370ccf 100644 --- a/asposepdfcloud/models/stamps_info_response.py +++ b/asposepdfcloud/models/stamps_info_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/storage_exist.py b/asposepdfcloud/models/storage_exist.py new file mode 100644 index 0000000..d89aeb3 --- /dev/null +++ b/asposepdfcloud/models/storage_exist.py @@ -0,0 +1,143 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class StorageExist(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'exists': 'bool' + } + + attribute_map = { + 'exists': 'Exists' + } + + def __init__(self, exists=None): + """ + StorageExist - a model defined in Swagger + """ + + self._exists = None + + self.exists = exists + + @property + def exists(self): + """ + Gets the exists of this StorageExist. + Shows that the storage exists. + + :return: The exists of this StorageExist. + :rtype: bool + """ + return self._exists + + @exists.setter + def exists(self, exists): + """ + Sets the exists of this StorageExist. + Shows that the storage exists. + + :param exists: The exists of this StorageExist. + :type: bool + """ + if exists is None: + raise ValueError("Invalid value for `exists`, must not be `None`") + + self._exists = exists + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, StorageExist): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/storage_file.py b/asposepdfcloud/models/storage_file.py new file mode 100644 index 0000000..4574a4a --- /dev/null +++ b/asposepdfcloud/models/storage_file.py @@ -0,0 +1,256 @@ +# coding: utf-8 + +""" + Aspose.PDF Cloud API Reference + + + Copyright (c) 2019 Aspose.PDF Cloud + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + + OpenAPI spec version: 3.0 + +""" + + +from pprint import pformat +from six import iteritems +import re + + +class StorageFile(object): + """ + NOTE: This class is auto generated by the swagger code generator program. + Do not edit the class manually. + """ + + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'name': 'str', + 'is_folder': 'bool', + 'modified_date': 'datetime', + 'size': 'int', + 'path': 'str' + } + + attribute_map = { + 'name': 'Name', + 'is_folder': 'IsFolder', + 'modified_date': 'ModifiedDate', + 'size': 'Size', + 'path': 'Path' + } + + def __init__(self, name=None, is_folder=None, modified_date=None, size=None, path=None): + """ + StorageFile - a model defined in Swagger + """ + + self._name = None + self._is_folder = None + self._modified_date = None + self._size = None + self._path = None + + if name is not None: + self.name = name + self.is_folder = is_folder + if modified_date is not None: + self.modified_date = modified_date + self.size = size + if path is not None: + self.path = path + + @property + def name(self): + """ + Gets the name of this StorageFile. + File or folder name. + + :return: The name of this StorageFile. + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """ + Sets the name of this StorageFile. + File or folder name. + + :param name: The name of this StorageFile. + :type: str + """ + + self._name = name + + @property + def is_folder(self): + """ + Gets the is_folder of this StorageFile. + True if it is a folder. + + :return: The is_folder of this StorageFile. + :rtype: bool + """ + return self._is_folder + + @is_folder.setter + def is_folder(self, is_folder): + """ + Sets the is_folder of this StorageFile. + True if it is a folder. + + :param is_folder: The is_folder of this StorageFile. + :type: bool + """ + if is_folder is None: + raise ValueError("Invalid value for `is_folder`, must not be `None`") + + self._is_folder = is_folder + + @property + def modified_date(self): + """ + Gets the modified_date of this StorageFile. + File or folder last modified DateTime. + + :return: The modified_date of this StorageFile. + :rtype: datetime + """ + return self._modified_date + + @modified_date.setter + def modified_date(self, modified_date): + """ + Sets the modified_date of this StorageFile. + File or folder last modified DateTime. + + :param modified_date: The modified_date of this StorageFile. + :type: datetime + """ + + self._modified_date = modified_date + + @property + def size(self): + """ + Gets the size of this StorageFile. + File or folder size. + + :return: The size of this StorageFile. + :rtype: int + """ + return self._size + + @size.setter + def size(self, size): + """ + Sets the size of this StorageFile. + File or folder size. + + :param size: The size of this StorageFile. + :type: int + """ + if size is None: + raise ValueError("Invalid value for `size`, must not be `None`") + + self._size = size + + @property + def path(self): + """ + Gets the path of this StorageFile. + File or folder path. + + :return: The path of this StorageFile. + :rtype: str + """ + return self._path + + @path.setter + def path(self, path): + """ + Sets the path of this StorageFile. + File or folder path. + + :param path: The path of this StorageFile. + :type: str + """ + + self._path = path + + def to_dict(self): + """ + Returns the model properties as a dict + """ + result = {} + + for attr, _ in iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """ + Returns the string representation of the model + """ + return pformat(self.to_dict()) + + def __repr__(self): + """ + For `print` and `pprint` + """ + return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + if not isinstance(other, StorageFile): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other diff --git a/asposepdfcloud/models/strike_out_annotation.py b/asposepdfcloud/models/strike_out_annotation.py index ce7b698..3a1607a 100644 --- a/asposepdfcloud/models/strike_out_annotation.py +++ b/asposepdfcloud/models/strike_out_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -124,8 +124,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -326,6 +325,8 @@ def rect(self, rect): :param rect: The rect of this StrikeOutAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/strike_out_annotation_response.py b/asposepdfcloud/models/strike_out_annotation_response.py index 70f6c1c..2bd7592 100644 --- a/asposepdfcloud/models/strike_out_annotation_response.py +++ b/asposepdfcloud/models/strike_out_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/strike_out_annotations.py b/asposepdfcloud/models/strike_out_annotations.py index 9050107..8ebb82c 100644 --- a/asposepdfcloud/models/strike_out_annotations.py +++ b/asposepdfcloud/models/strike_out_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/strike_out_annotations_response.py b/asposepdfcloud/models/strike_out_annotations_response.py index eae4da6..806cca0 100644 --- a/asposepdfcloud/models/strike_out_annotations_response.py +++ b/asposepdfcloud/models/strike_out_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/table.py b/asposepdfcloud/models/table.py index d33183e..77cf5fc 100644 --- a/asposepdfcloud/models/table.py +++ b/asposepdfcloud/models/table.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -146,8 +146,7 @@ def __init__(self, links=None, alignment=None, horizontal_alignment=None, vertic self.default_cell_padding = default_cell_padding if border is not None: self.border = border - if rows is not None: - self.rows = rows + self.rows = rows if default_column_width is not None: self.default_column_width = default_column_width if default_cell_border is not None: @@ -402,6 +401,8 @@ def rows(self, rows): :param rows: The rows of this Table. :type: list[Row] """ + if rows is None: + raise ValueError("Invalid value for `rows`, must not be `None`") self._rows = rows diff --git a/asposepdfcloud/models/table_broken.py b/asposepdfcloud/models/table_broken.py index f0e1473..236e8e0 100644 --- a/asposepdfcloud/models/table_broken.py +++ b/asposepdfcloud/models/table_broken.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/table_recognized.py b/asposepdfcloud/models/table_recognized.py index 553804d..b8c8795 100644 --- a/asposepdfcloud/models/table_recognized.py +++ b/asposepdfcloud/models/table_recognized.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/table_recognized_response.py b/asposepdfcloud/models/table_recognized_response.py index 98cbcb9..ea086f0 100644 --- a/asposepdfcloud/models/table_recognized_response.py +++ b/asposepdfcloud/models/table_recognized_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/tables_recognized.py b/asposepdfcloud/models/tables_recognized.py index 999cccb..0968c62 100644 --- a/asposepdfcloud/models/tables_recognized.py +++ b/asposepdfcloud/models/tables_recognized.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/tables_recognized_response.py b/asposepdfcloud/models/tables_recognized_response.py index 890ad8c..a1dfa0c 100644 --- a/asposepdfcloud/models/tables_recognized_response.py +++ b/asposepdfcloud/models/tables_recognized_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_annotation.py b/asposepdfcloud/models/text_annotation.py index c3762f3..d992962 100644 --- a/asposepdfcloud/models/text_annotation.py +++ b/asposepdfcloud/models/text_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -130,8 +130,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -336,6 +335,8 @@ def rect(self, rect): :param rect: The rect of this TextAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/text_annotation_response.py b/asposepdfcloud/models/text_annotation_response.py index 33da35f..966e3cb 100644 --- a/asposepdfcloud/models/text_annotation_response.py +++ b/asposepdfcloud/models/text_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_annotations.py b/asposepdfcloud/models/text_annotations.py index 65c5898..0421828 100644 --- a/asposepdfcloud/models/text_annotations.py +++ b/asposepdfcloud/models/text_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_annotations_response.py b/asposepdfcloud/models/text_annotations_response.py index f0a44ee..becb198 100644 --- a/asposepdfcloud/models/text_annotations_response.py +++ b/asposepdfcloud/models/text_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_footer.py b/asposepdfcloud/models/text_footer.py index c56d414..e1e8e5a 100644 --- a/asposepdfcloud/models/text_footer.py +++ b/asposepdfcloud/models/text_footer.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -231,7 +231,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this TextFooter. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this TextFooter. :rtype: Rotation @@ -242,7 +242,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this TextFooter. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this TextFooter. :type: Rotation @@ -392,7 +392,7 @@ def value(self, value): def text_state(self): """ Gets the text_state of this TextFooter. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :return: The text_state of this TextFooter. :rtype: TextState @@ -403,7 +403,7 @@ def text_state(self): def text_state(self, text_state): """ Sets the text_state of this TextFooter. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :param text_state: The text_state of this TextFooter. :type: TextState diff --git a/asposepdfcloud/models/text_header.py b/asposepdfcloud/models/text_header.py index 1759d4f..6142955 100644 --- a/asposepdfcloud/models/text_header.py +++ b/asposepdfcloud/models/text_header.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -231,7 +231,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this TextHeader. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this TextHeader. :rtype: Rotation @@ -242,7 +242,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this TextHeader. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this TextHeader. :type: Rotation @@ -392,7 +392,7 @@ def value(self, value): def text_state(self): """ Gets the text_state of this TextHeader. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :return: The text_state of this TextHeader. :rtype: TextState @@ -403,7 +403,7 @@ def text_state(self): def text_state(self, text_state): """ Sets the text_state of this TextHeader. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :param text_state: The text_state of this TextHeader. :type: TextState diff --git a/asposepdfcloud/models/text_horizontal_alignment.py b/asposepdfcloud/models/text_horizontal_alignment.py index 077ce08..8bf25ac 100644 --- a/asposepdfcloud/models/text_horizontal_alignment.py +++ b/asposepdfcloud/models/text_horizontal_alignment.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_icon.py b/asposepdfcloud/models/text_icon.py index ae671fc..bc13558 100644 --- a/asposepdfcloud/models/text_icon.py +++ b/asposepdfcloud/models/text_icon.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_line.py b/asposepdfcloud/models/text_line.py index 90b23a7..1ba0dc7 100644 --- a/asposepdfcloud/models/text_line.py +++ b/asposepdfcloud/models/text_line.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_rect.py b/asposepdfcloud/models/text_rect.py index e6d4030..1c152de 100644 --- a/asposepdfcloud/models/text_rect.py +++ b/asposepdfcloud/models/text_rect.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -219,7 +219,7 @@ def vertical_alignment(self, vertical_alignment): def position(self): """ Gets the position of this TextRect. - Gets or sets text position for text, represented with object. + Gets or sets text position for text, represented with TextRect object. :return: The position of this TextRect. :rtype: Position @@ -230,7 +230,7 @@ def position(self): def position(self, position): """ Sets the position of this TextRect. - Gets or sets text position for text, represented with object. + Gets or sets text position for text, represented with TextRect object. :param position: The position of this TextRect. :type: Position @@ -242,7 +242,7 @@ def position(self, position): def baseline_position(self): """ Gets the baseline_position of this TextRect. - Gets text position for text, represented with object. The YIndent of the Position structure represents baseline coordinate of the text fragment. + Gets text position for text, represented with TextRect object. The YIndent of the Position structure represents baseline coordinate of the text fragment. :return: The baseline_position of this TextRect. :rtype: Position @@ -253,7 +253,7 @@ def baseline_position(self): def baseline_position(self, baseline_position): """ Sets the baseline_position of this TextRect. - Gets text position for text, represented with object. The YIndent of the Position structure represents baseline coordinate of the text fragment. + Gets text position for text, represented with TextRect object. The YIndent of the Position structure represents baseline coordinate of the text fragment. :param baseline_position: The baseline_position of this TextRect. :type: Position @@ -265,7 +265,7 @@ def baseline_position(self, baseline_position): def text_state(self): """ Gets the text_state of this TextRect. - Gets or sets text state for the text that object represents. + Gets or sets text state for the text that TextRect object represents. :return: The text_state of this TextRect. :rtype: TextState @@ -276,7 +276,7 @@ def text_state(self): def text_state(self, text_state): """ Sets the text_state of this TextRect. - Gets or sets text state for the text that object represents. + Gets or sets text state for the text that TextRect object represents. :param text_state: The text_state of this TextRect. :type: TextState diff --git a/asposepdfcloud/models/text_rects.py b/asposepdfcloud/models/text_rects.py index 2c72738..ad903ea 100644 --- a/asposepdfcloud/models/text_rects.py +++ b/asposepdfcloud/models/text_rects.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_rects_response.py b/asposepdfcloud/models/text_rects_response.py index 5855be5..e87eb29 100644 --- a/asposepdfcloud/models/text_rects_response.py +++ b/asposepdfcloud/models/text_rects_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_replace.py b/asposepdfcloud/models/text_replace.py index 8ad0953..f659cf2 100644 --- a/asposepdfcloud/models/text_replace.py +++ b/asposepdfcloud/models/text_replace.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -104,6 +104,8 @@ def old_value(self, old_value): """ if old_value is None: raise ValueError("Invalid value for `old_value`, must not be `None`") + if old_value is not None and len(old_value) < 1: + raise ValueError("Invalid value for `old_value`, length must be greater than or equal to `1`") self._old_value = old_value @@ -129,6 +131,8 @@ def new_value(self, new_value): """ if new_value is None: raise ValueError("Invalid value for `new_value`, must not be `None`") + if new_value is not None and len(new_value) < 1: + raise ValueError("Invalid value for `new_value`, length must be greater than or equal to `1`") self._new_value = new_value diff --git a/asposepdfcloud/models/text_replace_list_request.py b/asposepdfcloud/models/text_replace_list_request.py index ecb5e67..4870345 100644 --- a/asposepdfcloud/models/text_replace_list_request.py +++ b/asposepdfcloud/models/text_replace_list_request.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -108,6 +108,7 @@ def text_replaces(self, text_replaces): def default_font(self): """ Gets the default_font of this TextReplaceListRequest. + Name of font to use if requested font is not embedded into document. :return: The default_font of this TextReplaceListRequest. :rtype: str @@ -118,6 +119,7 @@ def default_font(self): def default_font(self, default_font): """ Sets the default_font of this TextReplaceListRequest. + Name of font to use if requested font is not embedded into document. :param default_font: The default_font of this TextReplaceListRequest. :type: str diff --git a/asposepdfcloud/models/text_replace_response.py b/asposepdfcloud/models/text_replace_response.py index 62eff10..8a83838 100644 --- a/asposepdfcloud/models/text_replace_response.py +++ b/asposepdfcloud/models/text_replace_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -71,8 +71,7 @@ def __init__(self, code=None, status=None, matches=None): self.code = code if status is not None: self.status = status - if matches is not None: - self.matches = matches + self.matches = matches @property def code(self): @@ -142,6 +141,8 @@ def matches(self, matches): :param matches: The matches of this TextReplaceResponse. :type: int """ + if matches is None: + raise ValueError("Invalid value for `matches`, must not be `None`") self._matches = matches diff --git a/asposepdfcloud/models/text_stamp.py b/asposepdfcloud/models/text_stamp.py index 422a118..10e3e86 100644 --- a/asposepdfcloud/models/text_stamp.py +++ b/asposepdfcloud/models/text_stamp.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -241,7 +241,7 @@ def opacity(self, opacity): def rotate(self): """ Gets the rotate of this TextStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :return: The rotate of this TextStamp. :rtype: Rotation @@ -252,7 +252,7 @@ def rotate(self): def rotate(self, rotate): """ Sets the rotate of this TextStamp. - Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. + Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. :param rotate: The rotate of this TextStamp. :type: Rotation @@ -402,7 +402,7 @@ def value(self, value): def text_state(self): """ Gets the text_state of this TextStamp. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :return: The text_state of this TextStamp. :rtype: TextState @@ -413,7 +413,7 @@ def text_state(self): def text_state(self, text_state): """ Sets the text_state of this TextStamp. - Gets text properties of the stamp. See for details. + Gets text properties of the stamp. See TextState for details. :param text_state: The text_state of this TextStamp. :type: TextState diff --git a/asposepdfcloud/models/text_state.py b/asposepdfcloud/models/text_state.py index 1dca125..c7481fb 100644 --- a/asposepdfcloud/models/text_state.py +++ b/asposepdfcloud/models/text_state.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/text_style.py b/asposepdfcloud/models/text_style.py index 08cc143..f053e14 100644 --- a/asposepdfcloud/models/text_style.py +++ b/asposepdfcloud/models/text_style.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/underline_annotation.py b/asposepdfcloud/models/underline_annotation.py index 275caf0..7ca2519 100644 --- a/asposepdfcloud/models/underline_annotation.py +++ b/asposepdfcloud/models/underline_annotation.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -124,8 +124,7 @@ def __init__(self, links=None, color=None, contents=None, modified=None, id=None self.flags = flags if name is not None: self.name = name - if rect is not None: - self.rect = rect + self.rect = rect if page_index is not None: self.page_index = page_index if z_index is not None: @@ -326,6 +325,8 @@ def rect(self, rect): :param rect: The rect of this UnderlineAnnotation. :type: Rectangle """ + if rect is None: + raise ValueError("Invalid value for `rect`, must not be `None`") self._rect = rect diff --git a/asposepdfcloud/models/underline_annotation_response.py b/asposepdfcloud/models/underline_annotation_response.py index d03a3b3..2f9c51c 100644 --- a/asposepdfcloud/models/underline_annotation_response.py +++ b/asposepdfcloud/models/underline_annotation_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/underline_annotations.py b/asposepdfcloud/models/underline_annotations.py index 2f14086..9087bbe 100644 --- a/asposepdfcloud/models/underline_annotations.py +++ b/asposepdfcloud/models/underline_annotations.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/underline_annotations_response.py b/asposepdfcloud/models/underline_annotations_response.py index bedf4d7..d7bc881 100644 --- a/asposepdfcloud/models/underline_annotations_response.py +++ b/asposepdfcloud/models/underline_annotations_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/vertical_alignment.py b/asposepdfcloud/models/vertical_alignment.py index 0936320..c493034 100644 --- a/asposepdfcloud/models/vertical_alignment.py +++ b/asposepdfcloud/models/vertical_alignment.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/word_count.py b/asposepdfcloud/models/word_count.py index 9b9a440..5151298 100644 --- a/asposepdfcloud/models/word_count.py +++ b/asposepdfcloud/models/word_count.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/models/word_count_response.py b/asposepdfcloud/models/word_count_response.py index 28a0274..20502ea 100644 --- a/asposepdfcloud/models/word_count_response.py +++ b/asposepdfcloud/models/word_count_response.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -126,7 +126,7 @@ def status(self, status): def words_per_page(self): """ Gets the words_per_page of this WordCountResponse. - with words per page info. + WordCount with words per page info. :return: The words_per_page of this WordCountResponse. :rtype: WordCount @@ -137,7 +137,7 @@ def words_per_page(self): def words_per_page(self, words_per_page): """ Sets the words_per_page of this WordCountResponse. - with words per page info. + WordCount with words per page info. :param words_per_page: The words_per_page of this WordCountResponse. :type: WordCount diff --git a/asposepdfcloud/models/wrap_mode.py b/asposepdfcloud/models/wrap_mode.py index a4b690f..dc17e11 100644 --- a/asposepdfcloud/models/wrap_mode.py +++ b/asposepdfcloud/models/wrap_mode.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/asposepdfcloud/rest.py b/asposepdfcloud/rest.py index 1c9d431..cf7716c 100644 --- a/asposepdfcloud/rest.py +++ b/asposepdfcloud/rest.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ diff --git a/docs/Annotation.md b/docs/Annotation.md index 9c678a2..dd93f6c 100644 --- a/docs/Annotation.md +++ b/docs/Annotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/AnnotationInfo.md b/docs/AnnotationInfo.md index bc70355..1181c86 100644 --- a/docs/AnnotationInfo.md +++ b/docs/AnnotationInfo.md @@ -11,12 +11,12 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] **vertical_alignment** | [**VerticalAlignment**](VerticalAlignment.md) | Gets VerticalAlignment of the annotation. | [optional] -**annotation_type** | [**AnnotationType**](AnnotationType.md) | Gets annotation type. | [optional] +**annotation_type** | [**AnnotationType**](AnnotationType.md) | Gets annotation type. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Attachment.md b/docs/Attachment.md index d458c26..d5934d3 100644 --- a/docs/Attachment.md +++ b/docs/Attachment.md @@ -10,7 +10,7 @@ Name | Type | Description | Notes **name** | **str** | Gets the name of the attachment. | [optional] **creation_date** | **str** | The date and time when the embedded file was created. | [optional] **modification_date** | **str** | The date and time when the embedded file was last modified. | [optional] -**size** | **int** | The size of the uncompressed embedded file, in bytes. | [optional] +**size** | **int** | The size of the uncompressed embedded file, in bytes. | **check_sum** | **str** | A 16-byte string that is the checksum of the bytes of the uncompressed embedded file. The checksum is calculated by applying the standard MD5 message-digest algorithm to the bytes of the embedded file stream. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Bookmark.md b/docs/Bookmark.md new file mode 100644 index 0000000..9cd8049 --- /dev/null +++ b/docs/Bookmark.md @@ -0,0 +1,27 @@ +# Bookmark +Provides link to bookmark. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**links** | [**list[Link]**](Link.md) | Link to the document. | [optional] +**title** | **str** | Get the Title; | [optional] +**italic** | **bool** | Is bookmark italic. | [optional] +**bold** | **bool** | Is bookmark bold. | [optional] +**color** | [**Color**](Color.md) | Get the color | [optional] +**action** | **str** | Gets or sets the action bound with the bookmark. If PageNumber is presented the action can not be specified. The action type includes: "GoTo", "GoToR", "Launch", "Named". | [optional] +**level** | **int** | Gets or sets bookmark's hierarchy level. | [optional] +**destination** | **str** | Gets or sets bookmark's destination page. Required if action is set as string.Empty. | [optional] +**page_display** | **str** | Gets or sets the type of display bookmark's destination page. | [optional] +**page_display_bottom** | **int** | Gets or sets the bottom coordinate of page display. | [optional] +**page_display_left** | **int** | Gets or sets the left coordinate of page display. | [optional] +**page_display_right** | **int** | Gets or sets the right coordinate of page display. | [optional] +**page_display_top** | **int** | Gets or sets the top coordinate of page display. | [optional] +**page_display_zoom** | **int** | Gets or sets the zoom factor of page display. | [optional] +**page_number** | **int** | Gets or sets the number of bookmark's destination page. | [optional] +**remote_file** | **str** | Gets or sets the file (path) which is required for "GoToR" action of bookmark. | [optional] +**bookmarks** | [**Bookmarks**](Bookmarks.md) | The children bookmarks. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/BookmarkResponse.md b/docs/BookmarkResponse.md new file mode 100644 index 0000000..e57f434 --- /dev/null +++ b/docs/BookmarkResponse.md @@ -0,0 +1,13 @@ +# BookmarkResponse +Represents response containing single bookmark info + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **int** | Response status code. | +**status** | **str** | Response status. | [optional] +**bookmark** | [**Bookmark**](Bookmark.md) | Bookmark object | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Bookmarks.md b/docs/Bookmarks.md new file mode 100644 index 0000000..a0df6bf --- /dev/null +++ b/docs/Bookmarks.md @@ -0,0 +1,12 @@ +# Bookmarks +Represents list of bookmark. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**links** | [**list[Link]**](Link.md) | Link to the document. | [optional] +**list** | [**list[Bookmark]**](Bookmark.md) | List of bookmarks. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/BookmarksResponse.md b/docs/BookmarksResponse.md new file mode 100644 index 0000000..3ac2ff5 --- /dev/null +++ b/docs/BookmarksResponse.md @@ -0,0 +1,13 @@ +# BookmarksResponse +Represents response containing multiple bookmarks info + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **int** | Response status code. | +**status** | **str** | Response status. | [optional] +**bookmarks** | [**Bookmarks**](Bookmarks.md) | Bookmarks object | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CaretAnnotation.md b/docs/CaretAnnotation.md index e4458e0..caac888 100644 --- a/docs/CaretAnnotation.md +++ b/docs/CaretAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/CellRecognized.md b/docs/CellRecognized.md index c0c3f66..4e029a5 100644 --- a/docs/CellRecognized.md +++ b/docs/CellRecognized.md @@ -4,7 +4,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**text_rects** | [**TextRects**](TextRects.md) | Gets collection of objects that describes text containing in the cell | [optional] +**text_rects** | [**TextRects**](TextRects.md) | Gets collection of TextRect objects that describes text containing in the cell | [optional] **rectangle** | [**Rectangle**](Rectangle.md) | Gets rectangle that describes position of the cell on page | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/CircleAnnotation.md b/docs/CircleAnnotation.md index cae2c1e..a45d70b 100644 --- a/docs/CircleAnnotation.md +++ b/docs/CircleAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/CommonFigureAnnotation.md b/docs/CommonFigureAnnotation.md index c029f6a..301ea72 100644 --- a/docs/CommonFigureAnnotation.md +++ b/docs/CommonFigureAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/DiscUsage.md b/docs/DiscUsage.md index cff4f4b..47aed23 100644 --- a/docs/DiscUsage.md +++ b/docs/DiscUsage.md @@ -1,11 +1,11 @@ # DiscUsage - +Class for disc space information. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**used_size** | **int** | | -**total_size** | **int** | | +**used_size** | **int** | Application used disc space. | +**total_size** | **int** | Total disc space. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/DocumentPrivilege.md b/docs/DocumentPrivilege.md index 01f34c2..d938009 100644 --- a/docs/DocumentPrivilege.md +++ b/docs/DocumentPrivilege.md @@ -1,5 +1,5 @@ # DocumentPrivilege -Represents the privileges for accessing Pdf file./>. +Represents the privileges for accessing Pdf file. ## Properties Name | Type | Description | Notes diff --git a/docs/DocumentProperty.md b/docs/DocumentProperty.md index 9e205ec..e3b2a37 100644 --- a/docs/DocumentProperty.md +++ b/docs/DocumentProperty.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **links** | [**list[Link]**](Link.md) | Link to the document. | [optional] **name** | **str** | Pame of the property. | [optional] **value** | **str** | Property value. | [optional] -**built_in** | **bool** | Value indicating whether it is a built-in property. | [optional] +**built_in** | **bool** | Value indicating whether it is a built-in property. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Error.md b/docs/Error.md new file mode 100644 index 0000000..042526c --- /dev/null +++ b/docs/Error.md @@ -0,0 +1,14 @@ +# Error +Error + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **str** | Code | [optional] +**message** | **str** | Message | [optional] +**description** | **str** | Description | [optional] +**inner_error** | [**ErrorDetails**](ErrorDetails.md) | Inner Error | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ErrorDetails.md b/docs/ErrorDetails.md new file mode 100644 index 0000000..887e490 --- /dev/null +++ b/docs/ErrorDetails.md @@ -0,0 +1,12 @@ +# ErrorDetails +The error details + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**request_id** | **str** | The request id | [optional] +**date** | **datetime** | Date | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Field.md b/docs/Field.md index a5649fa..08d1d6b 100644 --- a/docs/Field.md +++ b/docs/Field.md @@ -9,7 +9,7 @@ Name | Type | Description | Notes **selected_items** | **list[int]** | Selected items. | [optional] **type** | [**FieldType**](FieldType.md) | Field type. | [optional] **rect** | [**Rectangle**](Rectangle.md) | Field rectangle. | [optional] -**values** | **list[str]** | Field values. | [optional] +**values** | **list[str]** | Field values. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Fields.md b/docs/Fields.md index 5936e20..91fe3d3 100644 --- a/docs/Fields.md +++ b/docs/Fields.md @@ -5,7 +5,7 @@ Represents list of form fields. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **links** | [**list[Link]**](Link.md) | Link to the document. | [optional] -**list** | [**list[Field]**](Field.md) | List of form fields. | [optional] +**list** | [**list[Field]**](Field.md) | List of form fields. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/FileAttachmentAnnotation.md b/docs/FileAttachmentAnnotation.md index f888074..d00b939 100644 --- a/docs/FileAttachmentAnnotation.md +++ b/docs/FileAttachmentAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/FileVersion.md b/docs/FileVersion.md index 05e13b1..dc551a1 100644 --- a/docs/FileVersion.md +++ b/docs/FileVersion.md @@ -1,16 +1,16 @@ # FileVersion - +File Version ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**is_folder** | **bool** | | -**modified_date** | **datetime** | | [optional] -**size** | **int** | | -**path** | **str** | | [optional] -**version_id** | **str** | | [optional] -**is_latest** | **bool** | | [optional] +**name** | **str** | File or folder name. | [optional] +**is_folder** | **bool** | True if it is a folder. | +**modified_date** | **datetime** | File or folder last modified DateTime. | [optional] +**size** | **int** | File or folder size. | +**path** | **str** | File or folder path. | [optional] +**version_id** | **str** | File Version ID. | [optional] +**is_latest** | **bool** | Specifies whether the file is (true) or is not (false) the latest version of an file. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/FileVersions.md b/docs/FileVersions.md new file mode 100644 index 0000000..c8af2e1 --- /dev/null +++ b/docs/FileVersions.md @@ -0,0 +1,11 @@ +# FileVersions +File versions FileVersion. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | [**list[FileVersion]**](FileVersion.md) | File versions FileVersion. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/FilesList.md b/docs/FilesList.md new file mode 100644 index 0000000..3a84c0a --- /dev/null +++ b/docs/FilesList.md @@ -0,0 +1,11 @@ +# FilesList +Files list + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | [**list[StorageFile]**](StorageFile.md) | Files and folders contained by folder StorageFile. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/FilesUploadResult.md b/docs/FilesUploadResult.md new file mode 100644 index 0000000..31064b9 --- /dev/null +++ b/docs/FilesUploadResult.md @@ -0,0 +1,12 @@ +# FilesUploadResult +File upload result + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**uploaded** | **list[str]** | List of uploaded file names | [optional] +**errors** | [**list[Error]**](Error.md) | List of errors. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/FreeTextAnnotation.md b/docs/FreeTextAnnotation.md index f8d61df..e962b25 100644 --- a/docs/FreeTextAnnotation.md +++ b/docs/FreeTextAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] @@ -23,7 +23,7 @@ Name | Type | Description | Notes **justification** | [**Justification**](Justification.md) | Gets Justification of the annotation. | [optional] **intent** | [**FreeTextIntent**](FreeTextIntent.md) | Gets or sets the intent of the free text annotation. | [optional] **rotate** | [**Rotation**](Rotation.md) | Angle of annotation rotation. | [optional] -**text_style** | [**TextStyle**](TextStyle.md) | Text style of the annotation. | [optional] +**text_style** | [**TextStyle**](TextStyle.md) | Text style of the annotation. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/GraphInfo.md b/docs/GraphInfo.md index e53d43d..be9f757 100644 --- a/docs/GraphInfo.md +++ b/docs/GraphInfo.md @@ -5,10 +5,10 @@ Represents graphics info. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **line_width** | **float** | Gets or sets a float value that indicates the line width of the graph. | [optional] -**color** | [**Color**](Color.md) | Gets or sets a object that indicates the color of the graph. | [optional] +**color** | [**Color**](Color.md) | Gets or sets a Color object that indicates the color of the graph. | [optional] **dash_array** | **list[int]** | Gets or sets a dash array. | [optional] **dash_phase** | **int** | Gets or sets a dash phase. | [optional] -**fill_color** | [**Color**](Color.md) | Gets or sets a object that indicates the fill color of the graph. | [optional] +**fill_color** | [**Color**](Color.md) | Gets or sets a Color object that indicates the fill color of the graph. | [optional] **is_doubled** | **bool** | Gets or sets is border doubled. | [optional] **skew_angle_x** | **float** | Gets or sets a float value that indicates the skew angle of the x-coordinate when transforming a coordinate system. | [optional] **skew_angle_y** | **float** | Gets or sets a float value that indicates the skew angle of the y-coordinate when transforming a coordinate system. | [optional] diff --git a/docs/HighlightAnnotation.md b/docs/HighlightAnnotation.md index 8dab148..6973594 100644 --- a/docs/HighlightAnnotation.md +++ b/docs/HighlightAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/Image.md b/docs/Image.md index ad1034b..015cef3 100644 --- a/docs/Image.md +++ b/docs/Image.md @@ -5,11 +5,11 @@ Represents image DTO. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **links** | [**list[Link]**](Link.md) | Link to the document. | [optional] -**width** | **int** | Gets width of the image. | [optional] -**height** | **int** | Gets height of the image. | [optional] +**width** | **int** | Gets width of the image. | +**height** | **int** | Gets height of the image. | **id** | **str** | Gets ID of the image. | [optional] **rectangle** | [**Rectangle**](Rectangle.md) | Gets rectangle of the image. | [optional] -**page_number** | **int** | Gets page number. | [optional] +**page_number** | **int** | Gets page number. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/ImageFooter.md b/docs/ImageFooter.md index dec12ff..dcd0ea7 100644 --- a/docs/ImageFooter.md +++ b/docs/ImageFooter.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] diff --git a/docs/ImageHeader.md b/docs/ImageHeader.md index ac6af74..abb5b0c 100644 --- a/docs/ImageHeader.md +++ b/docs/ImageHeader.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] diff --git a/docs/ImageStamp.md b/docs/ImageStamp.md index 2226594..bb654cc 100644 --- a/docs/ImageStamp.md +++ b/docs/ImageStamp.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] diff --git a/docs/InkAnnotation.md b/docs/InkAnnotation.md index 838a123..32782ed 100644 --- a/docs/InkAnnotation.md +++ b/docs/InkAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/LineAnnotation.md b/docs/LineAnnotation.md index 5c91e0a..efc6fa6 100644 --- a/docs/LineAnnotation.md +++ b/docs/LineAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] @@ -20,9 +20,9 @@ Name | Type | Description | Notes **subject** | **str** | Get the annotation subject. | [optional] **title** | **str** | Get the annotation title. | [optional] **rich_text** | **str** | Get the annotation RichText. | [optional] -**starting** | [**Point**](Point.md) | Gets or sets starting point of line. | [optional] +**starting** | [**Point**](Point.md) | Gets or sets starting point of line. | **starting_style** | [**LineEnding**](LineEnding.md) | Gets or sets line ending style for line starting point. | [optional] -**ending** | [**Point**](Point.md) | Gets or sets ending point of line. | [optional] +**ending** | [**Point**](Point.md) | Gets or sets ending point of line. | **ending_style** | [**LineEnding**](LineEnding.md) | Gets or sets ending style for end point of line. | [optional] **interior_color** | [**Color**](Color.md) | Gets or sets interior color of the annotation. | [optional] **leader_line** | **float** | Gets or sets leader line length. | [optional] diff --git a/docs/LinkAnnotation.md b/docs/LinkAnnotation.md index 3c5daf9..ab63ef3 100644 --- a/docs/LinkAnnotation.md +++ b/docs/LinkAnnotation.md @@ -5,11 +5,11 @@ Provides link to linkAnnotation. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **links** | [**list[Link]**](Link.md) | Link to the document. | [optional] -**action_type** | [**LinkActionType**](LinkActionType.md) | | [optional] -**action** | **str** | | [optional] -**highlighting** | [**LinkHighlightingMode**](LinkHighlightingMode.md) | | [optional] +**action_type** | [**LinkActionType**](LinkActionType.md) | | +**action** | **str** | | +**highlighting** | [**LinkHighlightingMode**](LinkHighlightingMode.md) | | **color** | [**Color**](Color.md) | | [optional] -**rect** | [**Rectangle**](Rectangle.md) | | [optional] +**rect** | [**Rectangle**](Rectangle.md) | | **id** | **str** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/MarkupAnnotation.md b/docs/MarkupAnnotation.md index 42ded46..cecb65e 100644 --- a/docs/MarkupAnnotation.md +++ b/docs/MarkupAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/MovieAnnotation.md b/docs/MovieAnnotation.md index e3558d8..9ecde1e 100644 --- a/docs/MovieAnnotation.md +++ b/docs/MovieAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/ObjectExist.md b/docs/ObjectExist.md new file mode 100644 index 0000000..1c3cb56 --- /dev/null +++ b/docs/ObjectExist.md @@ -0,0 +1,12 @@ +# ObjectExist +Object exists + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**exists** | **bool** | Indicates that the file or folder exists. | +**is_folder** | **bool** | True if it is a folder, false if it is a file. | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Page.md b/docs/Page.md index a46638d..1203313 100644 --- a/docs/Page.md +++ b/docs/Page.md @@ -5,7 +5,7 @@ Provides link to page. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **links** | [**list[Link]**](Link.md) | Link to the document. | [optional] -**id** | **int** | Page's id. | [optional] +**id** | **int** | Page's id. | **images** | [**Images**](Images.md) | Page's images | [optional] **rectangle** | [**Rectangle**](Rectangle.md) | Page's rectangle | [optional] diff --git a/docs/PageNumberStamp.md b/docs/PageNumberStamp.md index 0af6ec5..84ca471 100644 --- a/docs/PageNumberStamp.md +++ b/docs/PageNumberStamp.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] diff --git a/docs/PdfApi.md b/docs/PdfApi.md index adf90af..c27e4d6 100644 --- a/docs/PdfApi.md +++ b/docs/PdfApi.md @@ -1,17 +1,22 @@ # swagger_client.PdfApi -All URIs are relative to *https://api.aspose.cloud/v2.0* +All URIs are relative to *https://api.aspose.cloud/v3.0* Method | HTTP request | Description ------------- | ------------- | ------------- +[**copy_file**](PdfApi.md#copy_file) | **PUT** /pdf/storage/file/copy/\{srcPath} | Copy file +[**copy_folder**](PdfApi.md#copy_folder) | **PUT** /pdf/storage/folder/copy/\{srcPath} | Copy folder +[**create_folder**](PdfApi.md#create_folder) | **PUT** /pdf/storage/folder/\{path} | Create the folder [**delete_annotation**](PdfApi.md#delete_annotation) | **DELETE** /pdf/\{name}/annotations/\{annotationId} | Delete document annotation by ID +[**delete_bookmark**](PdfApi.md#delete_bookmark) | **DELETE** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Delete document bookmark by ID. [**delete_document_annotations**](PdfApi.md#delete_document_annotations) | **DELETE** /pdf/\{name}/annotations | Delete all annotations from the document +[**delete_document_bookmarks**](PdfApi.md#delete_document_bookmarks) | **DELETE** /pdf/\{name}/bookmarks/tree | Delete all document bookmarks. [**delete_document_link_annotations**](PdfApi.md#delete_document_link_annotations) | **DELETE** /pdf/\{name}/links | Delete all link annotations from the document [**delete_document_stamps**](PdfApi.md#delete_document_stamps) | **DELETE** /pdf/\{name}/stamps | Delete all stamps from the document [**delete_document_tables**](PdfApi.md#delete_document_tables) | **DELETE** /pdf/\{name}/tables | Delete all tables from the document [**delete_field**](PdfApi.md#delete_field) | **DELETE** /pdf/\{name}/fields/\{fieldName} | Delete document field by name. -[**delete_file**](PdfApi.md#delete_file) | **DELETE** /storage/file | Remove a specific file -[**delete_folder**](PdfApi.md#delete_folder) | **DELETE** /storage/folder | Remove a specific folder +[**delete_file**](PdfApi.md#delete_file) | **DELETE** /pdf/storage/file/\{path} | Delete file +[**delete_folder**](PdfApi.md#delete_folder) | **DELETE** /pdf/storage/folder/\{path} | Delete folder [**delete_image**](PdfApi.md#delete_image) | **DELETE** /pdf/\{name}/images/\{imageId} | Delete image from document page. [**delete_link_annotation**](PdfApi.md#delete_link_annotation) | **DELETE** /pdf/\{name}/links/\{linkId} | Delete document page link annotation by ID [**delete_page**](PdfApi.md#delete_page) | **DELETE** /pdf/\{name}/pages/\{pageNumber} | Delete document page by its number. @@ -23,13 +28,17 @@ Method | HTTP request | Description [**delete_property**](PdfApi.md#delete_property) | **DELETE** /pdf/\{name}/documentproperties/\{propertyName} | Delete document property. [**delete_stamp**](PdfApi.md#delete_stamp) | **DELETE** /pdf/\{name}/stamps/\{stampId} | Delete document stamp by ID [**delete_table**](PdfApi.md#delete_table) | **DELETE** /pdf/\{name}/tables/\{tableId} | Delete document table by ID +[**download_file**](PdfApi.md#download_file) | **GET** /pdf/storage/file/\{path} | Download file +[**get_bookmark**](PdfApi.md#get_bookmark) | **GET** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Read document bookmark. +[**get_bookmarks**](PdfApi.md#get_bookmarks) | **GET** /pdf/\{name}/bookmarks/list/\{bookmarkPath} | Read document bookmarks node list. [**get_caret_annotation**](PdfApi.md#get_caret_annotation) | **GET** /pdf/\{name}/annotations/caret/\{annotationId} | Read document page caret annotation by ID. [**get_circle_annotation**](PdfApi.md#get_circle_annotation) | **GET** /pdf/\{name}/annotations/circle/\{annotationId} | Read document page circle annotation by ID. -[**get_disc_usage**](PdfApi.md#get_disc_usage) | **GET** /storage/disc | Check the disk usage of the current account +[**get_disc_usage**](PdfApi.md#get_disc_usage) | **GET** /pdf/storage/disc | Get disc usage [**get_document**](PdfApi.md#get_document) | **GET** /pdf/\{name} | Read common document info. [**get_document_annotations**](PdfApi.md#get_document_annotations) | **GET** /pdf/\{name}/annotations | Read documant page annotations. Returns only FreeTextAnnotations, TextAnnotations, other annotations will implemented next releases. [**get_document_attachment_by_index**](PdfApi.md#get_document_attachment_by_index) | **GET** /pdf/\{name}/attachments/\{attachmentIndex} | Read document attachment info by its index. [**get_document_attachments**](PdfApi.md#get_document_attachments) | **GET** /pdf/\{name}/attachments | Read document attachments info. +[**get_document_bookmarks**](PdfApi.md#get_document_bookmarks) | **GET** /pdf/\{name}/bookmarks/tree | Read document bookmarks tree. [**get_document_caret_annotations**](PdfApi.md#get_document_caret_annotations) | **GET** /pdf/\{name}/annotations/caret | Read document caret annotations. [**get_document_circle_annotations**](PdfApi.md#get_document_circle_annotations) | **GET** /pdf/\{name}/annotations/circle | Read document circle annotations. [**get_document_file_attachment_annotations**](PdfApi.md#get_document_file_attachment_annotations) | **GET** /pdf/\{name}/annotations/fileattachment | Read document FileAttachment annotations. @@ -55,13 +64,17 @@ Method | HTTP request | Description [**get_document_tables**](PdfApi.md#get_document_tables) | **GET** /pdf/\{name}/tables | Read document tables. [**get_document_text_annotations**](PdfApi.md#get_document_text_annotations) | **GET** /pdf/\{name}/annotations/text | Read document text annotations. [**get_document_underline_annotations**](PdfApi.md#get_document_underline_annotations) | **GET** /pdf/\{name}/annotations/underline | Read document underline annotations. -[**get_download**](PdfApi.md#get_download) | **GET** /storage/file | Download a specific file [**get_download_document_attachment_by_index**](PdfApi.md#get_download_document_attachment_by_index) | **GET** /pdf/\{name}/attachments/\{attachmentIndex}/download | Download document attachment content by its index. [**get_epub_in_storage_to_pdf**](PdfApi.md#get_epub_in_storage_to_pdf) | **GET** /pdf/create/epub | Convert EPUB file (located on storage) to PDF format and return resulting file in response. +[**get_export_fields_from_pdf_to_fdf_in_storage**](PdfApi.md#get_export_fields_from_pdf_to_fdf_in_storage) | **GET** /pdf/\{name}/export/fdf | Export fields from from PDF in storage to FDF file. +[**get_export_fields_from_pdf_to_xfdf_in_storage**](PdfApi.md#get_export_fields_from_pdf_to_xfdf_in_storage) | **GET** /pdf/\{name}/export/xfdf | Export fields from from PDF in storage to XFDF file. +[**get_export_fields_from_pdf_to_xml_in_storage**](PdfApi.md#get_export_fields_from_pdf_to_xml_in_storage) | **GET** /pdf/\{name}/export/xml | Export fields from from PDF in storage to XML file. [**get_field**](PdfApi.md#get_field) | **GET** /pdf/\{name}/fields/\{fieldName} | Get document field by name. [**get_fields**](PdfApi.md#get_fields) | **GET** /pdf/\{name}/fields | Get document fields. [**get_file_attachment_annotation**](PdfApi.md#get_file_attachment_annotation) | **GET** /pdf/\{name}/annotations/fileattachment/\{annotationId} | Read document page FileAttachment annotation by ID. [**get_file_attachment_annotation_data**](PdfApi.md#get_file_attachment_annotation_data) | **GET** /pdf/\{name}/annotations/fileattachment/\{annotationId}/data | Read document page FileAttachment annotation by ID. +[**get_file_versions**](PdfApi.md#get_file_versions) | **GET** /pdf/storage/version/\{path} | Get file versions +[**get_files_list**](PdfApi.md#get_files_list) | **GET** /pdf/storage/folder/\{path} | Get all files and folders within a folder [**get_free_text_annotation**](PdfApi.md#get_free_text_annotation) | **GET** /pdf/\{name}/annotations/freetext/\{annotationId} | Read document page free text annotation by ID. [**get_highlight_annotation**](PdfApi.md#get_highlight_annotation) | **GET** /pdf/\{name}/annotations/highlight/\{annotationId} | Read document page highlight annotation by ID. [**get_html_in_storage_to_pdf**](PdfApi.md#get_html_in_storage_to_pdf) | **GET** /pdf/create/html | Convert HTML file (located on storage) to PDF format and return resulting file in response. @@ -71,14 +84,13 @@ Method | HTTP request | Description [**get_image_extract_as_png**](PdfApi.md#get_image_extract_as_png) | **GET** /pdf/\{name}/images/\{imageId}/extract/png | Extract document image in PNG format [**get_image_extract_as_tiff**](PdfApi.md#get_image_extract_as_tiff) | **GET** /pdf/\{name}/images/\{imageId}/extract/tiff | Extract document image in TIFF format [**get_images**](PdfApi.md#get_images) | **GET** /pdf/\{name}/pages/\{pageNumber}/images | Read document images. +[**get_import_fields_from_fdf_in_storage**](PdfApi.md#get_import_fields_from_fdf_in_storage) | **GET** /pdf/\{name}/import/fdf | Update fields from FDF file in storage. +[**get_import_fields_from_xfdf_in_storage**](PdfApi.md#get_import_fields_from_xfdf_in_storage) | **GET** /pdf/\{name}/import/xfdf | Update fields from XFDF file in storage. +[**get_import_fields_from_xml_in_storage**](PdfApi.md#get_import_fields_from_xml_in_storage) | **GET** /pdf/\{name}/import/xml | Import from XML file (located on storage) to PDF format and return resulting file in response. [**get_ink_annotation**](PdfApi.md#get_ink_annotation) | **GET** /pdf/\{name}/annotations/ink/\{annotationId} | Read document page ink annotation by ID. -[**get_is_exist**](PdfApi.md#get_is_exist) | **GET** /storage/exist | Check if a specific file or folder exists -[**get_is_storage_exist**](PdfApi.md#get_is_storage_exist) | **GET** /storage/\{name}/exist | Check if storage exists [**get_la_te_x_in_storage_to_pdf**](PdfApi.md#get_la_te_x_in_storage_to_pdf) | **GET** /pdf/create/latex | Convert LaTeX file (located on storage) to PDF format and return resulting file in response. [**get_line_annotation**](PdfApi.md#get_line_annotation) | **GET** /pdf/\{name}/annotations/line/\{annotationId} | Read document page line annotation by ID. [**get_link_annotation**](PdfApi.md#get_link_annotation) | **GET** /pdf/\{name}/links/\{linkId} | Read document link annotation by ID. -[**get_list_file_versions**](PdfApi.md#get_list_file_versions) | **GET** /storage/version | Get the file's versions list -[**get_list_files**](PdfApi.md#get_list_files) | **GET** /storage/folder | Get the file listing of a specific folder [**get_mht_in_storage_to_pdf**](PdfApi.md#get_mht_in_storage_to_pdf) | **GET** /pdf/create/mht | Convert MHT file (located on storage) to PDF format and return resulting file in response. [**get_movie_annotation**](PdfApi.md#get_movie_annotation) | **GET** /pdf/\{name}/annotations/movie/\{annotationId} | Read document page movie annotation by ID. [**get_page**](PdfApi.md#get_page) | **GET** /pdf/\{name}/pages/\{pageNumber} | Read document page info. @@ -155,7 +167,11 @@ Method | HTTP request | Description [**get_xml_in_storage_to_pdf**](PdfApi.md#get_xml_in_storage_to_pdf) | **GET** /pdf/create/xml | Convert XML file (located on storage) to PDF format and return resulting file in response. [**get_xps_in_storage_to_pdf**](PdfApi.md#get_xps_in_storage_to_pdf) | **GET** /pdf/create/xps | Convert XPS file (located on storage) to PDF format and return resulting file in response. [**get_xsl_fo_in_storage_to_pdf**](PdfApi.md#get_xsl_fo_in_storage_to_pdf) | **GET** /pdf/create/xslfo | Convert XslFo file (located on storage) to PDF format and return resulting file in response. +[**move_file**](PdfApi.md#move_file) | **PUT** /pdf/storage/file/move/\{srcPath} | Move file +[**move_folder**](PdfApi.md#move_folder) | **PUT** /pdf/storage/folder/move/\{srcPath} | Move folder +[**object_exists**](PdfApi.md#object_exists) | **GET** /pdf/storage/exist/\{path} | Check if file or folder exists [**post_append_document**](PdfApi.md#post_append_document) | **POST** /pdf/\{name}/appendDocument | Append document to existing one. +[**post_bookmark**](PdfApi.md#post_bookmark) | **POST** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Add document bookmarks. [**post_change_password_document_in_storage**](PdfApi.md#post_change_password_document_in_storage) | **POST** /pdf/\{name}/changepassword | Change document password in storage. [**post_create_field**](PdfApi.md#post_create_field) | **POST** /pdf/\{name}/fields | Create field. [**post_decrypt_document_in_storage**](PdfApi.md#post_decrypt_document_in_storage) | **POST** /pdf/\{name}/decrypt | Decrypt document in storage. @@ -167,9 +183,10 @@ Method | HTTP request | Description [**post_document_text_replace**](PdfApi.md#post_document_text_replace) | **POST** /pdf/\{name}/text/replace | Document's replace text method. [**post_encrypt_document_in_storage**](PdfApi.md#post_encrypt_document_in_storage) | **POST** /pdf/\{name}/encrypt | Encrypt document in storage. [**post_flatten_document**](PdfApi.md#post_flatten_document) | **POST** /pdf/\{name}/flatten | Flatten the document. +[**post_import_fields_from_fdf**](PdfApi.md#post_import_fields_from_fdf) | **POST** /pdf/\{name}/import/fdf | Update fields from FDF file in request. +[**post_import_fields_from_xfdf**](PdfApi.md#post_import_fields_from_xfdf) | **POST** /pdf/\{name}/import/xfdf | Update fields from XFDF file in request. +[**post_import_fields_from_xml**](PdfApi.md#post_import_fields_from_xml) | **POST** /pdf/\{name}/import/xml | Update fields from XML file in request. [**post_insert_image**](PdfApi.md#post_insert_image) | **POST** /pdf/\{name}/pages/\{pageNumber}/images | Insert image to document page. -[**post_move_file**](PdfApi.md#post_move_file) | **POST** /storage/file | Move a specific file -[**post_move_folder**](PdfApi.md#post_move_folder) | **POST** /storage/folder | Move a specific folder [**post_move_page**](PdfApi.md#post_move_page) | **POST** /pdf/\{name}/pages/\{pageNumber}/movePage | Move page to new position. [**post_optimize_document**](PdfApi.md#post_optimize_document) | **POST** /pdf/\{name}/optimize | Optimize document. [**post_page_caret_annotations**](PdfApi.md#post_page_caret_annotations) | **POST** /pdf/\{name}/pages/\{pageNumber}/annotations/caret | Add document page caret annotations. @@ -204,15 +221,17 @@ Method | HTTP request | Description [**put_add_new_page**](PdfApi.md#put_add_new_page) | **PUT** /pdf/\{name}/pages | Add new page to end of the document. [**put_add_text**](PdfApi.md#put_add_text) | **PUT** /pdf/\{name}/pages/\{pageNumber}/text | Add text to PDF document page. [**put_annotations_flatten**](PdfApi.md#put_annotations_flatten) | **PUT** /pdf/\{name}/annotations/flatten | Flattens the annotations of the specified types +[**put_bookmark**](PdfApi.md#put_bookmark) | **PUT** /pdf/\{name}/bookmarks/bookmark/\{bookmarkPath} | Update document bookmark. [**put_caret_annotation**](PdfApi.md#put_caret_annotation) | **PUT** /pdf/\{name}/annotations/caret/\{annotationId} | Replace document caret annotation [**put_change_password_document**](PdfApi.md#put_change_password_document) | **PUT** /pdf/changepassword | Change document password from content. [**put_circle_annotation**](PdfApi.md#put_circle_annotation) | **PUT** /pdf/\{name}/annotations/circle/\{annotationId} | Replace document circle annotation -[**put_create**](PdfApi.md#put_create) | **PUT** /storage/file | Upload a specific file [**put_create_document**](PdfApi.md#put_create_document) | **PUT** /pdf/\{name} | Create empty document. -[**put_create_folder**](PdfApi.md#put_create_folder) | **PUT** /storage/folder | Create the folder [**put_decrypt_document**](PdfApi.md#put_decrypt_document) | **PUT** /pdf/decrypt | Decrypt document from content. [**put_encrypt_document**](PdfApi.md#put_encrypt_document) | **PUT** /pdf/encrypt | Encrypt document from content. [**put_epub_in_storage_to_pdf**](PdfApi.md#put_epub_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/epub | Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. +[**put_export_fields_from_pdf_to_fdf_in_storage**](PdfApi.md#put_export_fields_from_pdf_to_fdf_in_storage) | **PUT** /pdf/\{name}/export/fdf | Export fields from from PDF in storage to FDF file in storage. +[**put_export_fields_from_pdf_to_xfdf_in_storage**](PdfApi.md#put_export_fields_from_pdf_to_xfdf_in_storage) | **PUT** /pdf/\{name}/export/xfdf | Export fields from from PDF in storage to XFDF file in storage. +[**put_export_fields_from_pdf_to_xml_in_storage**](PdfApi.md#put_export_fields_from_pdf_to_xml_in_storage) | **PUT** /pdf/\{name}/export/xml | Export fields from from PDF in storage to XML file in storage. [**put_fields_flatten**](PdfApi.md#put_fields_flatten) | **PUT** /pdf/\{name}/fields/flatten | Flatten form fields in document. [**put_file_attachment_annotation**](PdfApi.md#put_file_attachment_annotation) | **PUT** /pdf/\{name}/annotations/fileattachment/\{annotationId} | Replace document FileAttachment annotation [**put_file_attachment_annotation_data_extract**](PdfApi.md#put_file_attachment_annotation_data_extract) | **PUT** /pdf/\{name}/annotations/fileattachment/\{annotationId}/data/extract | Extract document FileAttachment annotation content to storage @@ -228,6 +247,9 @@ Method | HTTP request | Description [**put_images_extract_as_jpeg**](PdfApi.md#put_images_extract_as_jpeg) | **PUT** /pdf/\{name}/pages/\{pageNumber}/images/extract/jpeg | Extract document images in JPEG format to folder. [**put_images_extract_as_png**](PdfApi.md#put_images_extract_as_png) | **PUT** /pdf/\{name}/pages/\{pageNumber}/images/extract/png | Extract document images in PNG format to folder. [**put_images_extract_as_tiff**](PdfApi.md#put_images_extract_as_tiff) | **PUT** /pdf/\{name}/pages/\{pageNumber}/images/extract/tiff | Extract document images in TIFF format to folder. +[**put_import_fields_from_fdf_in_storage**](PdfApi.md#put_import_fields_from_fdf_in_storage) | **PUT** /pdf/\{name}/import/fdf | Update fields from FDF file in storage. +[**put_import_fields_from_xfdf_in_storage**](PdfApi.md#put_import_fields_from_xfdf_in_storage) | **PUT** /pdf/\{name}/import/xfdf | Update fields from XFDF file in storage. +[**put_import_fields_from_xml_in_storage**](PdfApi.md#put_import_fields_from_xml_in_storage) | **PUT** /pdf/\{name}/import/xml | Update fields from XML file in storage. [**put_ink_annotation**](PdfApi.md#put_ink_annotation) | **PUT** /pdf/\{name}/annotations/ink/\{annotationId} | Replace document ink annotation [**put_la_te_x_in_storage_to_pdf**](PdfApi.md#put_la_te_x_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/latex | Convert LaTeX file (located on storage) to PDF format and upload resulting file to storage. [**put_line_annotation**](PdfApi.md#put_line_annotation) | **PUT** /pdf/\{name}/annotations/line/\{annotationId} | Replace document line annotation @@ -299,8 +321,84 @@ Method | HTTP request | Description [**put_xml_in_storage_to_pdf**](PdfApi.md#put_xml_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/xml | Convert XML file (located on storage) to PDF format and upload resulting file to storage. [**put_xps_in_storage_to_pdf**](PdfApi.md#put_xps_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/xps | Convert XPS file (located on storage) to PDF format and upload resulting file to storage. [**put_xsl_fo_in_storage_to_pdf**](PdfApi.md#put_xsl_fo_in_storage_to_pdf) | **PUT** /pdf/\{name}/create/xslfo | Convert XslFo file (located on storage) to PDF format and upload resulting file to storage. +[**storage_exists**](PdfApi.md#storage_exists) | **GET** /pdf/storage/\{storageName}/exist | Check if storage exists +[**upload_file**](PdfApi.md#upload_file) | **PUT** /pdf/storage/file/\{path} | Upload file +# **copy_file** +> copy_file(src_path, dest_path, src_storage_name=src_storage_name, dest_storage_name=dest_storage_name, version_id=version_id) + +Copy file + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **src_path** | **str**| Source file path e.g. '/folder/file.ext' | + **dest_path** | **str**| Destination file path | + **src_storage_name** | **str**| Source storage name | [optional] + **dest_storage_name** | **str**| Destination storage name | [optional] + **version_id** | **str**| File version ID to copy | [optional] + +### Return type + +void (empty response body) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **copy_folder** +> copy_folder(src_path, dest_path, src_storage_name=src_storage_name, dest_storage_name=dest_storage_name) + +Copy folder + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **src_path** | **str**| Source folder path e.g. '/src' | + **dest_path** | **str**| Destination folder path e.g. '/dst' | + **src_storage_name** | **str**| Source storage name | [optional] + **dest_storage_name** | **str**| Destination storage name | [optional] + +### Return type + +void (empty response body) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_folder** +> create_folder(path, storage_name=storage_name) + +Create the folder + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **path** | **str**| Folder path to create e.g. 'folder_1/folder_2/' | + **storage_name** | **str**| Storage name | [optional] + +### Return type + +void (empty response body) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **delete_annotation** > AsposeResponse delete_annotation(name, annotation_id, storage=storage, folder=folder) @@ -326,6 +424,31 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **delete_bookmark** +> AsposeResponse delete_bookmark(name, bookmark_path, folder=folder, storage=storage) + +Delete document bookmark by ID. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **bookmark_path** | **str**| The bookmark path. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**AsposeResponse**](AsposeResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **delete_document_annotations** > AsposeResponse delete_document_annotations(name, storage=storage, folder=folder) @@ -350,6 +473,30 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **delete_document_bookmarks** +> AsposeResponse delete_document_bookmarks(name, folder=folder, storage=storage) + +Delete all document bookmarks. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**AsposeResponse**](AsposeResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **delete_document_link_annotations** > AsposeResponse delete_document_link_annotations(name, storage=storage, folder=folder) @@ -448,21 +595,21 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **delete_file** -> AsposeResponse delete_file(path, version_id=version_id, storage=storage) +> delete_file(path, storage_name=storage_name, version_id=version_id) -Remove a specific file +Delete file ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| Path of the file including file name and extension e.g. /Folder1/file.ext | - **version_id** | **str**| File's version | [optional] - **storage** | **str**| User's storage name | [optional] + **path** | **str**| File path e.g. '/folder/file.ext' | + **storage_name** | **str**| Storage name | [optional] + **version_id** | **str**| File version ID to delete | [optional] ### Return type -[**AsposeResponse**](AsposeResponse.md) +void (empty response body) ### HTTP request headers @@ -472,21 +619,21 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **delete_folder** -> AsposeResponse delete_folder(path, storage=storage, recursive=recursive) +> delete_folder(path, storage_name=storage_name, recursive=recursive) -Remove a specific folder +Delete folder ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| Folder path e.g. /Folder1 | - **storage** | **str**| User's storage name | [optional] - **recursive** | **bool**| Remove recursivelly inner folder/files. If false and folder contains data than exception is raised. | [optional] [default to false] + **path** | **str**| Folder path e.g. '/folder' | + **storage_name** | **str**| Storage name | [optional] + **recursive** | **bool**| Enable to delete folders, subfolders and files | [optional] [default to false] ### Return type -[**AsposeResponse**](AsposeResponse.md) +void (empty response body) ### HTTP request headers @@ -769,6 +916,80 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **download_file** +> file download_file(path, storage_name=storage_name, version_id=version_id) + +Download file + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **path** | **str**| File path e.g. '/folder/file.ext' | + **storage_name** | **str**| Storage name | [optional] + **version_id** | **str**| File version ID to download | [optional] + +### Return type + +**file** + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: multipart/form-data + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_bookmark** +> BookmarkResponse get_bookmark(name, bookmark_path, folder=folder, storage=storage) + +Read document bookmark. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **bookmark_path** | **str**| The bookmark path. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**BookmarkResponse**](BookmarkResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_bookmarks** +> BookmarksResponse get_bookmarks(name, bookmark_path, folder=folder, storage=storage) + +Read document bookmarks node list. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **bookmark_path** | **str**| The bookmark path. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**BookmarksResponse**](BookmarksResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_caret_annotation** > CaretAnnotationResponse get_caret_annotation(name, annotation_id, storage=storage, folder=folder) @@ -820,19 +1041,19 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_disc_usage** -> DiscUsageResponse get_disc_usage(storage=storage) +> DiscUsage get_disc_usage(storage_name=storage_name) -Check the disk usage of the current account +Get disc usage ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **storage** | **str**| User's storage name | [optional] + **storage_name** | **str**| Storage name | [optional] ### Return type -[**DiscUsageResponse**](DiscUsageResponse.md) +[**DiscUsage**](DiscUsage.md) ### HTTP request headers @@ -938,6 +1159,30 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_document_bookmarks** +> BookmarksResponse get_document_bookmarks(name, folder=folder, storage=storage) + +Read document bookmarks tree. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**BookmarksResponse**](BookmarksResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_document_caret_annotations** > CaretAnnotationsResponse get_document_caret_annotations(name, storage=storage, folder=folder) @@ -1540,18 +1785,19 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_download** -> file get_download(path, version_id=version_id, storage=storage) +# **get_download_document_attachment_by_index** +> file get_download_document_attachment_by_index(name, attachment_index, storage=storage, folder=folder) -Download a specific file +Download document attachment content by its index. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| Path of the file including the file name and extension e.g. /file.ext | - **version_id** | **str**| File's version | [optional] - **storage** | **str**| User's storage name | [optional] + **name** | **str**| The document name. | + **attachment_index** | **int**| The attachment index. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type @@ -1564,17 +1810,39 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_download_document_attachment_by_index** -> file get_download_document_attachment_by_index(name, attachment_index, storage=storage, folder=folder) +# **get_epub_in_storage_to_pdf** +> file get_epub_in_storage_to_pdf(src_path, storage=storage) -Download document attachment content by its index. +Convert EPUB file (located on storage) to PDF format and return resulting file in response. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **src_path** | **str**| Full source filename (ex. /folder1/folder2/template.epub) | + **storage** | **str**| The document storage. | [optional] + +### Return type + +**file** + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: multipart/form-data + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_export_fields_from_pdf_to_fdf_in_storage** +> file get_export_fields_from_pdf_to_fdf_in_storage(name, storage=storage, folder=folder) + +Export fields from from PDF in storage to FDF file. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **attachment_index** | **int**| The attachment index. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -1589,17 +1857,42 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_epub_in_storage_to_pdf** -> file get_epub_in_storage_to_pdf(src_path, storage=storage) +# **get_export_fields_from_pdf_to_xfdf_in_storage** +> file get_export_fields_from_pdf_to_xfdf_in_storage(name, storage=storage, folder=folder) -Convert EPUB file (located on storage) to PDF format and return resulting file in response. +Export fields from from PDF in storage to XFDF file. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **src_path** | **str**| Full source filename (ex. /folder1/folder2/template.epub) | + **name** | **str**| The document name. | **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + +### Return type + +**file** + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: multipart/form-data + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_export_fields_from_pdf_to_xml_in_storage** +> file get_export_fields_from_pdf_to_xml_in_storage(name, storage=storage, folder=folder) + +Export fields from from PDF in storage to XML file. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type @@ -1622,7 +1915,7 @@ Get document field by name. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **field_name** | **str**| The field name/ | + **field_name** | **str**| The field name (name should be encoded). | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -1682,7 +1975,7 @@ Name | Type | Description | Notes ### HTTP request headers - **Content-Type**: application/json - - **Accept**: multipart/form-data + - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -1711,6 +2004,52 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_file_versions** +> FileVersions get_file_versions(path, storage_name=storage_name) + +Get file versions + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **path** | **str**| File path e.g. '/file.ext' | + **storage_name** | **str**| Storage name | [optional] + +### Return type + +[**FileVersions**](FileVersions.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_files_list** +> FilesList get_files_list(path, storage_name=storage_name) + +Get all files and folders within a folder + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **path** | **str**| Folder path e.g. '/folder' | + **storage_name** | **str**| Storage name | [optional] + +### Return type + +[**FilesList**](FilesList.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_free_text_annotation** > FreeTextAnnotationResponse get_free_text_annotation(name, annotation_id, storage=storage, folder=folder) @@ -1813,7 +2152,7 @@ Name | Type | Description | Notes ### HTTP request headers - **Content-Type**: application/json - - **Accept**: multipart/form-data + - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -1828,8 +2167,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -1855,8 +2194,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -1882,8 +2221,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -1909,8 +2248,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -1950,88 +2289,69 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_ink_annotation** -> InkAnnotationResponse get_ink_annotation(name, annotation_id, storage=storage, folder=folder) +# **get_import_fields_from_fdf_in_storage** +> file get_import_fields_from_fdf_in_storage(name, fdf_file_path, storage=storage, folder=folder) -Read document page ink annotation by ID. +Update fields from FDF file in storage. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **annotation_id** | **str**| The annotation ID. | + **fdf_file_path** | **str**| The Fdf file path. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] ### Return type -[**InkAnnotationResponse**](InkAnnotationResponse.md) - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_is_exist** -> FileExistResponse get_is_exist(path, version_id=version_id, storage=storage) - -Check if a specific file or folder exists - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **path** | **str**| File or folder path e.g. /file.ext or /Folder1 | - **version_id** | **str**| File's version | [optional] - **storage** | **str**| User's storage name | [optional] - -### Return type - -[**FileExistResponse**](FileExistResponse.md) +**file** ### HTTP request headers - **Content-Type**: application/json - - **Accept**: application/json + - **Accept**: multipart/form-data [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_is_storage_exist** -> StorageExistResponse get_is_storage_exist(name) +# **get_import_fields_from_xfdf_in_storage** +> file get_import_fields_from_xfdf_in_storage(name, xfdf_file_path, storage=storage, folder=folder) -Check if storage exists +Update fields from XFDF file in storage. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **name** | **str**| Storage name | + **name** | **str**| The document name. | + **xfdf_file_path** | **str**| The XFDF file path. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type -[**StorageExistResponse**](StorageExistResponse.md) +**file** ### HTTP request headers - **Content-Type**: application/json - - **Accept**: application/json + - **Accept**: multipart/form-data [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_la_te_x_in_storage_to_pdf** -> file get_la_te_x_in_storage_to_pdf(src_path, storage=storage) +# **get_import_fields_from_xml_in_storage** +> file get_import_fields_from_xml_in_storage(name, xml_file_path, storage=storage, folder=folder) -Convert LaTeX file (located on storage) to PDF format and return resulting file in response. +Import from XML file (located on storage) to PDF format and return resulting file in response. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **src_path** | **str**| Full source filename (ex. /folder1/folder2/template.tex) | + **name** | **str**| The document name. | + **xml_file_path** | **str**| Full source filename (ex. /folder1/folder2/template.xml) | **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type @@ -2044,10 +2364,10 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_line_annotation** -> LineAnnotationResponse get_line_annotation(name, annotation_id, storage=storage, folder=folder) +# **get_ink_annotation** +> InkAnnotationResponse get_ink_annotation(name, annotation_id, storage=storage, folder=folder) -Read document page line annotation by ID. +Read document page ink annotation by ID. ### Parameters @@ -2060,7 +2380,7 @@ Name | Type | Description | Notes ### Return type -[**LineAnnotationResponse**](LineAnnotationResponse.md) +[**InkAnnotationResponse**](InkAnnotationResponse.md) ### HTTP request headers @@ -2069,46 +2389,46 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_link_annotation** -> LinkAnnotationResponse get_link_annotation(name, link_id, storage=storage, folder=folder) +# **get_la_te_x_in_storage_to_pdf** +> file get_la_te_x_in_storage_to_pdf(src_path, storage=storage) -Read document link annotation by ID. +Convert LaTeX file (located on storage) to PDF format and return resulting file in response. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **name** | **str**| The document name. | - **link_id** | **str**| The link ID. | + **src_path** | **str**| Full source filename (ex. /folder1/folder2/template.tex) | **storage** | **str**| The document storage. | [optional] - **folder** | **str**| The document folder. | [optional] ### Return type -[**LinkAnnotationResponse**](LinkAnnotationResponse.md) +**file** ### HTTP request headers - **Content-Type**: application/json - - **Accept**: application/json + - **Accept**: multipart/form-data [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_list_file_versions** -> FileVersionsResponse get_list_file_versions(path, storage=storage) +# **get_line_annotation** +> LineAnnotationResponse get_line_annotation(name, annotation_id, storage=storage, folder=folder) -Get the file's versions list +Read document page line annotation by ID. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| File path e.g. /file.ext or /Folder1/file.ext | - **storage** | **str**| User's storage name | [optional] + **name** | **str**| The document name. | + **annotation_id** | **str**| The annotation ID. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type -[**FileVersionsResponse**](FileVersionsResponse.md) +[**LineAnnotationResponse**](LineAnnotationResponse.md) ### HTTP request headers @@ -2117,21 +2437,23 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_list_files** -> FilesResponse get_list_files(path=path, storage=storage) +# **get_link_annotation** +> LinkAnnotationResponse get_link_annotation(name, link_id, storage=storage, folder=folder) -Get the file listing of a specific folder +Read document link annotation by ID. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| Start with name of storage e.g. root folder '/'or some folder '/folder1/..' | [optional] [default to /] - **storage** | **str**| User's storage name | [optional] + **name** | **str**| The document name. | + **link_id** | **str**| The link ID. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type -[**FilesResponse**](FilesResponse.md) +[**LinkAnnotationResponse**](LinkAnnotationResponse.md) ### HTTP request headers @@ -2209,7 +2531,7 @@ Name | Type | Description | Notes ### HTTP request headers - **Content-Type**: application/json - - **Accept**: multipart/form-data + - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -2299,8 +2621,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -2326,8 +2648,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -2353,8 +2675,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -2380,8 +2702,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -2407,8 +2729,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -2434,8 +2756,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -2968,7 +3290,7 @@ Name | Type | Description | Notes **ury** | **float**| Y - coordinate of upper-right corner. | **format** | **list[str]**| List of formats for search. | [optional] **regex** | **str**| Formats are specified as a regular expression. | [optional] - **split_rects** | **bool**| Split result fragments (default is true). | [optional] + **split_rects** | **bool**| Split result fragments (default is true). | [optional] [default to true] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -3601,7 +3923,7 @@ Name | Type | Description | Notes ### HTTP request headers - **Content-Type**: application/json - - **Accept**: multipart/form-data + - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3651,7 +3973,7 @@ Name | Type | Description | Notes ### HTTP request headers - **Content-Type**: application/json - - **Accept**: multipart/form-data + - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3877,7 +4199,7 @@ Name | Type | Description | Notes **ury** | **float**| Y - coordinate of upper-right corner. | **format** | **list[str]**| List of formats for search. | [optional] **regex** | **str**| Formats are specified as a regular expression. | [optional] - **split_rects** | **bool**| Split result fragments (default is true). | [optional] + **split_rects** | **bool**| Split result fragments (default is true). | [optional] [default to true] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -4115,8 +4437,83 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **move_file** +> move_file(src_path, dest_path, src_storage_name=src_storage_name, dest_storage_name=dest_storage_name, version_id=version_id) + +Move file + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **src_path** | **str**| Source file path e.g. '/src.ext' | + **dest_path** | **str**| Destination file path e.g. '/dest.ext' | + **src_storage_name** | **str**| Source storage name | [optional] + **dest_storage_name** | **str**| Destination storage name | [optional] + **version_id** | **str**| File version ID to move | [optional] + +### Return type + +void (empty response body) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **move_folder** +> move_folder(src_path, dest_path, src_storage_name=src_storage_name, dest_storage_name=dest_storage_name) + +Move folder + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **src_path** | **str**| Folder path to move e.g. '/folder' | + **dest_path** | **str**| Destination folder path to move to e.g '/dst' | + **src_storage_name** | **str**| Source storage name | [optional] + **dest_storage_name** | **str**| Destination storage name | [optional] + +### Return type + +void (empty response body) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **object_exists** +> ObjectExist object_exists(path, storage_name=storage_name, version_id=version_id) + +Check if file or folder exists + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **path** | **str**| File or folder path e.g. '/file.ext' or '/folder' | + **storage_name** | **str**| Storage name | [optional] + **version_id** | **str**| File version ID | [optional] + +### Return type + +[**ObjectExist**](ObjectExist.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **post_append_document** -> DocumentResponse post_append_document(name, append_document=append_document, append_file=append_file, start_page=start_page, end_page=end_page, storage=storage, folder=folder) +> DocumentResponse post_append_document(name, append_file, start_page=start_page, end_page=end_page, storage=storage, folder=folder) Append document to existing one. @@ -4125,8 +4522,7 @@ Append document to existing one. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The original document name. | - **append_document** | [**AppendDocument**](AppendDocument.md)| with the append document data. | [optional] - **append_file** | **str**| Append file server path. | [optional] + **append_file** | **str**| Append file server path. | **start_page** | **int**| Appending start page. | [optional] [default to 0] **end_page** | **int**| Appending end page. | [optional] [default to 0] **storage** | **str**| The documents storage. | [optional] @@ -4134,7 +4530,33 @@ Name | Type | Description | Notes ### Return type -[**DocumentResponse**](DocumentResponse.md) +[**DocumentResponse**](DocumentResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **post_bookmark** +> BookmarksResponse post_bookmark(name, bookmark_path, bookmarks, folder=folder, storage=storage) + +Add document bookmarks. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **bookmark_path** | **str**| The bookmark path. | + **bookmarks** | [**list[Bookmark]**](Bookmark.md)| The array of bookmark. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**BookmarksResponse**](BookmarksResponse.md) ### HTTP request headers @@ -4171,7 +4593,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **post_create_field** -> AsposeResponse post_create_field(name, page, field=field, storage=storage, folder=folder) +> AsposeResponse post_create_field(name, page, field, storage=storage, folder=folder) Create field. @@ -4181,7 +4603,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page** | **int**| Document page number. | - **field** | [**Field**](Field.md)| with the field data. | [optional] + **field** | [**Field**](Field.md)| Field with the field data. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -4393,8 +4815,8 @@ Name | Type | Description | Notes **name** | **str**| Document name. | **user_password** | **str**| User password (encrypted Base64). | **owner_password** | **str**| Owner password (encrypted Base64). | - **crypto_algorithm** | **str**| Cryptographic algorithm, see for details. | - **permissions_flags** | [**list[PermissionsFlags]**](PermissionsFlags.md)| Array of document permissions, see for details. | [optional] + **crypto_algorithm** | **str**| Cryptographic algorithm, see CryptoAlgorithm for details. | + **permissions_flags** | [**list[PermissionsFlags]**](PermissionsFlags.md)| Array of document permissions, see PermissionsFlags for details. | [optional] **use_pdf20** | **bool**| Support for revision 6 (Extension 8). | [optional] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -4437,25 +4859,19 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **post_insert_image** -> AsposeResponse post_insert_image(name, page_number, llx, lly, urx, ury, image_file_path=image_file_path, storage=storage, folder=folder, image=image) +# **post_import_fields_from_fdf** +> AsposeResponse post_import_fields_from_fdf(name, storage=storage, folder=folder, fdf_data=fdf_data) -Insert image to document page. +Update fields from FDF file in request. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **page_number** | **int**| The page number. | - **llx** | **float**| Coordinate lower left X. | - **lly** | **float**| Coordinate lower left Y. | - **urx** | **float**| Coordinate upper right X. | - **ury** | **float**| Coordinate upper right Y. | - **image_file_path** | **str**| Path to image file if specified. Request content is used otherwise. | [optional] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] - **image** | **file**| Image file. | [optional] + **fdf_data** | **file**| Fdf file. | [optional] ### Return type @@ -4468,20 +4884,19 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **post_move_file** -> AsposeResponse post_move_file(src, dest, version_id=version_id, storage=storage, dest_storage=dest_storage) +# **post_import_fields_from_xfdf** +> AsposeResponse post_import_fields_from_xfdf(name, storage=storage, folder=folder, xfdf_data=xfdf_data) -Move a specific file +Update fields from XFDF file in request. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **src** | **str**| Source file path e.g. /fileSource.ext | - **dest** | **str**| Destination file path e.g. /fileDestination.ext | - **version_id** | **str**| Source file's version, | [optional] - **storage** | **str**| User's source storage name | [optional] - **dest_storage** | **str**| User's destination storage name | [optional] + **name** | **str**| The document name. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + **xfdf_data** | **file**| Xfdf file. | [optional] ### Return type @@ -4494,19 +4909,19 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **post_move_folder** -> AsposeResponse post_move_folder(src, dest, storage=storage, dest_storage=dest_storage) +# **post_import_fields_from_xml** +> AsposeResponse post_import_fields_from_xml(name, storage=storage, folder=folder, xml_data=xml_data) -Move a specific folder +Update fields from XML file in request. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **src** | **str**| Source folder path e.g. /Folder1 | - **dest** | **str**| Destination folder path e.g. /Folder2 | - **storage** | **str**| User's source storage name | [optional] - **dest_storage** | **str**| User's destination storage name | [optional] + **name** | **str**| The document name. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + **xml_data** | **file**| Xml file. | [optional] ### Return type @@ -4514,7 +4929,38 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **post_insert_image** +> AsposeResponse post_insert_image(name, page_number, llx, lly, urx, ury, image_file_path=image_file_path, storage=storage, folder=folder, image=image) + +Insert image to document page. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **page_number** | **int**| The page number. | + **llx** | **float**| Coordinate lower left X. | + **lly** | **float**| Coordinate lower left Y. | + **urx** | **float**| Coordinate upper right X. | + **ury** | **float**| Coordinate upper right Y. | + **image_file_path** | **str**| Path to image file if specified. Request content is used otherwise. | [optional] + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + **image** | **file**| Image file. | [optional] + +### Return type + +[**AsposeResponse**](AsposeResponse.md) + +### HTTP request headers + + - **Content-Type**: multipart/form-data - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -4546,7 +4992,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **post_optimize_document** -> AsposeResponse post_optimize_document(name, options=options, storage=storage, folder=folder) +> AsposeResponse post_optimize_document(name, options, storage=storage, folder=folder) Optimize document. @@ -4555,7 +5001,7 @@ Optimize document. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **options** | [**OptimizeOptions**](OptimizeOptions.md)| The optimization options. | [optional] + **options** | [**OptimizeOptions**](OptimizeOptions.md)| The optimization options. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -5247,7 +5693,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **post_sign_document** -> AsposeResponse post_sign_document(name, signature=signature, storage=storage, folder=folder) +> AsposeResponse post_sign_document(name, sign, storage=storage, folder=folder) Sign document. @@ -5256,7 +5702,7 @@ Sign document. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **signature** | [**Signature**](Signature.md)| Signature object containing signature data. | [optional] + **sign** | [**Signature**](Signature.md)| Signature object containing signature data. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -5272,7 +5718,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **post_sign_page** -> AsposeResponse post_sign_page(name, page_number, signature=signature, storage=storage, folder=folder) +> AsposeResponse post_sign_page(name, page_number, sign, storage=storage, folder=folder) Sign page. @@ -5282,7 +5728,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **signature** | [**Signature**](Signature.md)| Signature object containing signature data. | [optional] + **sign** | [**Signature**](Signature.md)| Signature object containing signature data. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -5349,7 +5795,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **put_add_text** -> AsposeResponse put_add_text(name, page_number, paragraph=paragraph, folder=folder, storage=storage) +> AsposeResponse put_add_text(name, page_number, paragraph, folder=folder, storage=storage) Add text to PDF document page. @@ -5359,7 +5805,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| Number of page (starting from 1). | - **paragraph** | [**Paragraph**](Paragraph.md)| Paragraph data. | [optional] + **paragraph** | [**Paragraph**](Paragraph.md)| Paragraph data. | **folder** | **str**| Document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -5401,6 +5847,32 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **put_bookmark** +> BookmarkResponse put_bookmark(name, bookmark_path, bookmark, folder=folder, storage=storage) + +Update document bookmark. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **bookmark_path** | **str**| The bookmark path. | + **bookmark** | [**Bookmark**](Bookmark.md)| The bookmark. | + **folder** | **str**| The document folder. | [optional] + **storage** | **str**| The document storage. | [optional] + +### Return type + +[**BookmarkResponse**](BookmarkResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **put_caret_annotation** > CaretAnnotationResponse put_caret_annotation(name, annotation_id, annotation, storage=storage, folder=folder) @@ -5480,19 +5952,43 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **put_create** -> AsposeResponse put_create(path, file, version_id=version_id, storage=storage) +# **put_create_document** +> DocumentResponse put_create_document(name, storage=storage, folder=folder) -Upload a specific file +Create empty document. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| Path where to upload including filename and extension e.g. /file.ext or /Folder 1/file.ext | - **file** | **file**| File to upload | - **version_id** | **str**| Source file's version | [optional] - **storage** | **str**| User's storage name | [optional] + **name** | **str**| The new document name. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The new document folder. | [optional] + +### Return type + +[**DocumentResponse**](DocumentResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **put_decrypt_document** +> AsposeResponse put_decrypt_document(out_path, password, storage=storage, file=file) + +Decrypt document from content. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **out_path** | **str**| Full resulting filename (ex. /folder1/folder2/result.doc) | + **password** | **str**| The password (encrypted Base64). | + **storage** | **str**| The document storage. | [optional] + **file** | **file**| A file to be derypted. | [optional] ### Return type @@ -5505,42 +6001,48 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **put_create_document** -> DocumentResponse put_create_document(name, storage=storage, folder=folder) +# **put_encrypt_document** +> AsposeResponse put_encrypt_document(out_path, user_password, owner_password, crypto_algorithm, permissions_flags=permissions_flags, use_pdf20=use_pdf20, storage=storage, file=file) -Create empty document. +Encrypt document from content. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **name** | **str**| The new document name. | + **out_path** | **str**| Full resulting filename (ex. /folder1/folder2/result.doc) | + **user_password** | **str**| User password (encrypted Base64). | + **owner_password** | **str**| Owner password (encrypted Base64). | + **crypto_algorithm** | **str**| Cryptographic algorithm, see CryptoAlgorithm for details. | + **permissions_flags** | [**list[PermissionsFlags]**](PermissionsFlags.md)| Array of document permissions, see PermissionsFlags for details. | [optional] + **use_pdf20** | **bool**| Support for revision 6 (Extension 8). | [optional] **storage** | **str**| The document storage. | [optional] - **folder** | **str**| The new document folder. | [optional] + **file** | **file**| A file to be encrypted. | [optional] ### Return type -[**DocumentResponse**](DocumentResponse.md) +[**AsposeResponse**](AsposeResponse.md) ### HTTP request headers - - **Content-Type**: application/json + - **Content-Type**: multipart/form-data - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **put_create_folder** -> AsposeResponse put_create_folder(path, storage=storage, dest_storage=dest_storage) +# **put_epub_in_storage_to_pdf** +> AsposeResponse put_epub_in_storage_to_pdf(name, src_path, storage=storage, dst_folder=dst_folder) -Create the folder +Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **path** | **str**| Target folder's path e.g. Folder1/Folder2/. The folders will be created recursively | - **storage** | **str**| User's source storage name | [optional] - **dest_storage** | **str**| User's destination storage name | [optional] + **name** | **str**| The document name. | + **src_path** | **str**| Full source filename (ex. /folder1/folder2/template.epub) | + **storage** | **str**| The document storage. | [optional] + **dst_folder** | **str**| The destination document folder. | [optional] ### Return type @@ -5553,19 +6055,19 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **put_decrypt_document** -> AsposeResponse put_decrypt_document(out_path, password, storage=storage, file=file) +# **put_export_fields_from_pdf_to_fdf_in_storage** +> AsposeResponse put_export_fields_from_pdf_to_fdf_in_storage(name, fdf_output_file_path, storage=storage, folder=folder) -Decrypt document from content. +Export fields from from PDF in storage to FDF file in storage. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **out_path** | **str**| Full resulting filename (ex. /folder1/folder2/result.doc) | - **password** | **str**| The password (encrypted Base64). | + **name** | **str**| The document name. | + **fdf_output_file_path** | **str**| The output Fdf file path. | **storage** | **str**| The document storage. | [optional] - **file** | **file**| A file to be derypted. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type @@ -5573,28 +6075,24 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: multipart/form-data + - **Content-Type**: application/json - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **put_encrypt_document** -> AsposeResponse put_encrypt_document(out_path, user_password, owner_password, crypto_algorithm, permissions_flags=permissions_flags, use_pdf20=use_pdf20, storage=storage, file=file) +# **put_export_fields_from_pdf_to_xfdf_in_storage** +> AsposeResponse put_export_fields_from_pdf_to_xfdf_in_storage(name, xfdf_output_file_path, storage=storage, folder=folder) -Encrypt document from content. +Export fields from from PDF in storage to XFDF file in storage. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **out_path** | **str**| Full resulting filename (ex. /folder1/folder2/result.doc) | - **user_password** | **str**| User password (encrypted Base64). | - **owner_password** | **str**| Owner password (encrypted Base64). | - **crypto_algorithm** | **str**| Cryptographic algorithm, see for details. | - **permissions_flags** | [**list[PermissionsFlags]**](PermissionsFlags.md)| Array of document permissions, see for details. | [optional] - **use_pdf20** | **bool**| Support for revision 6 (Extension 8). | [optional] + **name** | **str**| The document name. | + **xfdf_output_file_path** | **str**| The output xfdf file path. | **storage** | **str**| The document storage. | [optional] - **file** | **file**| A file to be encrypted. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type @@ -5602,24 +6100,24 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: multipart/form-data + - **Content-Type**: application/json - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **put_epub_in_storage_to_pdf** -> AsposeResponse put_epub_in_storage_to_pdf(name, src_path, storage=storage, dst_folder=dst_folder) +# **put_export_fields_from_pdf_to_xml_in_storage** +> AsposeResponse put_export_fields_from_pdf_to_xml_in_storage(name, xml_output_file_path, storage=storage, folder=folder) -Convert EPUB file (located on storage) to PDF format and upload resulting file to storage. +Export fields from from PDF in storage to XML file in storage. ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **src_path** | **str**| Full source filename (ex. /folder1/folder2/template.epub) | + **xml_output_file_path** | **str**| The output xml file path. | **storage** | **str**| The document storage. | [optional] - **dst_folder** | **str**| The destination document folder. | [optional] + **folder** | **str**| The document folder. | [optional] ### Return type @@ -5804,8 +6302,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -5832,8 +6330,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -5860,8 +6358,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -5888,8 +6386,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **image_id** | **str**| Image ID. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -5915,7 +6413,7 @@ Convert image file (located on storage) to PDF format and upload resulting file Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **image_templates** | [**ImageTemplatesRequest**](ImageTemplatesRequest.md)| Image templates | + **image_templates** | [**ImageTemplatesRequest**](ImageTemplatesRequest.md)| ImageTemplatesRequestImage templates | **dst_folder** | **str**| The destination document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -5941,8 +6439,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -5969,9 +6467,9 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] - **storage** | **str**| | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] + **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -5997,8 +6495,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -6025,8 +6523,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] **dest_folder** | **str**| The document folder. | [optional] @@ -6042,6 +6540,81 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **put_import_fields_from_fdf_in_storage** +> AsposeResponse put_import_fields_from_fdf_in_storage(name, fdf_file_path, storage=storage, folder=folder) + +Update fields from FDF file in storage. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **fdf_file_path** | **str**| The Fdf file path. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + +### Return type + +[**AsposeResponse**](AsposeResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **put_import_fields_from_xfdf_in_storage** +> AsposeResponse put_import_fields_from_xfdf_in_storage(name, xfdf_file_path, storage=storage, folder=folder) + +Update fields from XFDF file in storage. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **xfdf_file_path** | **str**| The XFDF file path. | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + +### Return type + +[**AsposeResponse**](AsposeResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **put_import_fields_from_xml_in_storage** +> AsposeResponse put_import_fields_from_xml_in_storage(name, xml_file_path, storage=storage, folder=folder) + +Update fields from XML file in storage. + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **name** | **str**| The document name. | + **xml_file_path** | **str**| Full source filename (ex. /folder1/folder2/template.xml) | + **storage** | **str**| The document storage. | [optional] + **folder** | **str**| The document folder. | [optional] + +### Return type + +[**AsposeResponse**](AsposeResponse.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **put_ink_annotation** > InkAnnotationResponse put_ink_annotation(name, annotation_id, annotation, storage=storage, folder=folder) @@ -6146,7 +6719,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **put_merge_documents** -> DocumentResponse put_merge_documents(name, merge_documents=merge_documents, storage=storage, folder=folder) +> DocumentResponse put_merge_documents(name, merge_documents, storage=storage, folder=folder) Merge a list of documents. @@ -6155,7 +6728,7 @@ Merge a list of documents. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| Resulting documen name. | - **merge_documents** | [**MergeDocuments**](MergeDocuments.md)| with a list of documents. | [optional] + **merge_documents** | [**MergeDocuments**](MergeDocuments.md)| MergeDocuments with a list of documents. | **storage** | **str**| Resulting document storage. | [optional] **folder** | **str**| Resulting document folder. | [optional] @@ -6232,7 +6805,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **page_number** | **int**| The page number. | - **stamp** | [**Stamp**](Stamp.md)| with data. | + **stamp** | [**Stamp**](Stamp.md)| Stamp with data. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -6259,8 +6832,8 @@ Name | Type | Description | Notes **name** | **str**| The document name. | **page_number** | **int**| The page number. | **out_path** | **str**| The out path of result image. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -6287,8 +6860,8 @@ Name | Type | Description | Notes **name** | **str**| The document name. | **page_number** | **int**| The page number. | **out_path** | **str**| The out path of result image. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -6315,8 +6888,8 @@ Name | Type | Description | Notes **name** | **str**| The document name. | **page_number** | **int**| The page number. | **out_path** | **str**| The out path of result image. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -6343,8 +6916,8 @@ Name | Type | Description | Notes **name** | **str**| The document name. | **page_number** | **int**| The page number. | **out_path** | **str**| The out path of result image. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -6371,8 +6944,8 @@ Name | Type | Description | Notes **name** | **str**| The document name. | **page_number** | **int**| The page number. | **out_path** | **str**| The out path of result image. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -6399,8 +6972,8 @@ Name | Type | Description | Notes **name** | **str**| The document name. | **page_number** | **int**| The page number. | **out_path** | **str**| The out path of result image. | - **width** | **int**| The converted image width. | [optional] - **height** | **int**| The converted image height. | [optional] + **width** | **int**| The converted image width. | [optional] [default to 0] + **height** | **int**| The converted image height. | [optional] [default to 0] **folder** | **str**| The document folder. | [optional] **storage** | **str**| The document storage. | [optional] @@ -7284,7 +7857,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **put_privileges** -> AsposeResponse put_privileges(name, privileges=privileges, storage=storage, folder=folder) +> AsposeResponse put_privileges(name, privileges, storage=storage, folder=folder) Update privilege document. @@ -7293,7 +7866,7 @@ Update privilege document. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **privileges** | [**DocumentPrivilege**](DocumentPrivilege.md)| Document privileges. | [optional] + **privileges** | [**DocumentPrivilege**](DocumentPrivilege.md)| Document privileges. DocumentPrivilege | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -7783,7 +8356,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **put_update_field** -> FieldResponse put_update_field(name, field_name, field=field, storage=storage, folder=folder) +> FieldResponse put_update_field(name, field_name, field, storage=storage, folder=folder) Update field. @@ -7793,7 +8366,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | **field_name** | **str**| The name of a field to be updated. | - **field** | [**Field**](Field.md)| with the field data. | [optional] + **field** | [**Field**](Field.md)| Field with the field data. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -7809,7 +8382,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **put_update_fields** -> FieldsResponse put_update_fields(name, fields=fields, storage=storage, folder=folder) +> FieldsResponse put_update_fields(name, fields, storage=storage, folder=folder) Update fields. @@ -7818,7 +8391,7 @@ Update fields. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **name** | **str**| The document name. | - **fields** | [**Fields**](Fields.md)| with the fields data. | [optional] + **fields** | [**Fields**](Fields.md)| Fields with the fields data. | **storage** | **str**| The document storage. | [optional] **folder** | **str**| The document folder. | [optional] @@ -7990,3 +8563,49 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **storage_exists** +> StorageExist storage_exists(storage_name) + +Check if storage exists + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **storage_name** | **str**| Storage name | + +### Return type + +[**StorageExist**](StorageExist.md) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **upload_file** +> FilesUploadResult upload_file(path, file, storage_name=storage_name) + +Upload file + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **path** | **str**| Path where to upload including filename and extension e.g. /file.ext or /Folder 1/file.ext If the content is multipart and path does not contains the file name it tries to get them from filename parameter from Content-Disposition header. | + **file** | **file**| File to upload | + **storage_name** | **str**| Storage name | [optional] + +### Return type + +[**FilesUploadResult**](FilesUploadResult.md) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/PdfPageStamp.md b/docs/PdfPageStamp.md index 2523c5d..0cbb887 100644 --- a/docs/PdfPageStamp.md +++ b/docs/PdfPageStamp.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] diff --git a/docs/PolyAnnotation.md b/docs/PolyAnnotation.md index 35d4dbc..09d2764 100644 --- a/docs/PolyAnnotation.md +++ b/docs/PolyAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] @@ -24,7 +24,7 @@ Name | Type | Description | Notes **starting_style** | [**LineEnding**](LineEnding.md) | Gets or sets the style of first line ending. | [optional] **ending_style** | [**LineEnding**](LineEnding.md) | Gets or sets the style of second line ending. | [optional] **intent** | [**PolyIntent**](PolyIntent.md) | Gets or sets the intent of the polygon or polyline annotation. | [optional] -**vertices** | [**list[Point]**](Point.md) | Gets or sets an array of points representing the horizontal and vertical coordinates of each vertex. | [optional] +**vertices** | [**list[Point]**](Point.md) | Gets or sets an array of points representing the horizontal and vertical coordinates of each vertex. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/PolyLineAnnotation.md b/docs/PolyLineAnnotation.md index 1652090..9a0caed 100644 --- a/docs/PolyLineAnnotation.md +++ b/docs/PolyLineAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] @@ -24,7 +24,7 @@ Name | Type | Description | Notes **starting_style** | [**LineEnding**](LineEnding.md) | Gets or sets the style of first line ending. | [optional] **ending_style** | [**LineEnding**](LineEnding.md) | Gets or sets the style of second line ending. | [optional] **intent** | [**PolyIntent**](PolyIntent.md) | Gets or sets the intent of the polygon or polyline annotation. | [optional] -**vertices** | [**list[Point]**](Point.md) | Gets or sets an array of points representing the horizontal and vertical coordinates of each vertex. | [optional] +**vertices** | [**list[Point]**](Point.md) | Gets or sets an array of points representing the horizontal and vertical coordinates of each vertex. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/PolygonAnnotation.md b/docs/PolygonAnnotation.md index 72b53be..56d3576 100644 --- a/docs/PolygonAnnotation.md +++ b/docs/PolygonAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] @@ -24,7 +24,7 @@ Name | Type | Description | Notes **starting_style** | [**LineEnding**](LineEnding.md) | Gets or sets the style of first line ending. | [optional] **ending_style** | [**LineEnding**](LineEnding.md) | Gets or sets the style of second line ending. | [optional] **intent** | [**PolyIntent**](PolyIntent.md) | Gets or sets the intent of the polygon or polyline annotation. | [optional] -**vertices** | [**list[Point]**](Point.md) | Gets or sets an array of points representing the horizontal and vertical coordinates of each vertex. | [optional] +**vertices** | [**list[Point]**](Point.md) | Gets or sets an array of points representing the horizontal and vertical coordinates of each vertex. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/PopupAnnotation.md b/docs/PopupAnnotation.md index 03b0b27..c2c1c18 100644 --- a/docs/PopupAnnotation.md +++ b/docs/PopupAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/PopupAnnotationWithParent.md b/docs/PopupAnnotationWithParent.md index cc65fe4..6ca3dd9 100644 --- a/docs/PopupAnnotationWithParent.md +++ b/docs/PopupAnnotationWithParent.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/RedactionAnnotation.md b/docs/RedactionAnnotation.md index 2530cff..15fd1e6 100644 --- a/docs/RedactionAnnotation.md +++ b/docs/RedactionAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/ScreenAnnotation.md b/docs/ScreenAnnotation.md index 8a4b99b..e7d895d 100644 --- a/docs/ScreenAnnotation.md +++ b/docs/ScreenAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/Signature.md b/docs/Signature.md index d03a550..bed8176 100644 --- a/docs/Signature.md +++ b/docs/Signature.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **reason** | **str** | Gets or sets the reason of the signature. | [optional] **contact** | **str** | Gets or sets the contact of the signature. | [optional] **location** | **str** | Gets or sets the location of the signature. | [optional] -**visible** | **bool** | Gets or sets a value indicating whether this is visible. Supports only when signing particular page. | +**visible** | **bool** | Gets or sets a value indicating whether this Signature is visible. Supports only when signing particular page. | **rectangle** | [**Rectangle**](Rectangle.md) | Gets or sets the visible rectangle of the signature. Supports only when signing particular page. | [optional] **form_field_name** | **str** | Gets or sets the name of the signature field. Supports only when signing document with particular form field. | [optional] **authority** | **str** | Gets or sets the name of the person or authority signing the document.. | [optional] diff --git a/docs/SignatureVerifyResponse.md b/docs/SignatureVerifyResponse.md index 2014743..9a3cb4c 100644 --- a/docs/SignatureVerifyResponse.md +++ b/docs/SignatureVerifyResponse.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **code** | **int** | Response status code. | **status** | **str** | Response status. | [optional] -**valid** | **bool** | True if signature is valid and false if not | [optional] +**valid** | **bool** | True if signature is valid and false if not | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SoundAnnotation.md b/docs/SoundAnnotation.md index 9d55a3d..384a8e5 100644 --- a/docs/SoundAnnotation.md +++ b/docs/SoundAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] @@ -20,7 +20,7 @@ Name | Type | Description | Notes **subject** | **str** | Get the annotation subject. | [optional] **title** | **str** | Get the annotation title. | [optional] **rich_text** | **str** | Get the annotation RichText. | [optional] -**file_path** | **str** | A sound file path defining the sound to be played when the annotation is activated. | [optional] +**file_path** | **str** | A sound file path defining the sound to be played when the annotation is activated. | **icon** | [**SoundIcon**](SoundIcon.md) | Gets or sets an icon to be used in displaying the annotation. | [optional] **rate** | **int** | Gets or sets the sampling rate, in samples per second. | [optional] **channels** | **int** | Gets or sets the number of sound channels. | [optional] diff --git a/docs/SplitResultDocument.md b/docs/SplitResultDocument.md index 8a4815b..5143533 100644 --- a/docs/SplitResultDocument.md +++ b/docs/SplitResultDocument.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **rel** | **str** | atom:link elements MAY have a "rel" attribute that indicates the link relation type. If the "rel" attribute is not present, the link element MUST be interpreted as if the link relation type is "alternate". | [optional] **type** | **str** | On the link element, the "type" attribute's value is an advisory media type: it is a hint about the type of the representation that is expected to be returned when the value of the href attribute is dereferenced. Note that the type attribute does not override the actual media type returned with the representation. | [optional] **title** | **str** | The "title" attribute conveys human-readable information about the link. The content of the "title" attribute is Language-Sensitive. | [optional] -**id** | **int** | Gets or sets the page number. | [optional] +**id** | **int** | Gets or sets the page number. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SquareAnnotation.md b/docs/SquareAnnotation.md index c54de2b..e39dbaf 100644 --- a/docs/SquareAnnotation.md +++ b/docs/SquareAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/SquigglyAnnotation.md b/docs/SquigglyAnnotation.md index 9be8e90..2167085 100644 --- a/docs/SquigglyAnnotation.md +++ b/docs/SquigglyAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/Stamp.md b/docs/Stamp.md index 8f9e718..d8d733f 100644 --- a/docs/Stamp.md +++ b/docs/Stamp.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **left_margin** | **float** | Gets or sets left margin of stamp. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] **right_margin** | **float** | Gets or sets right margin of stamp. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **top_margin** | **float** | Gets or sets top margin of stamp. | [optional] **vertical_alignment** | [**VerticalAlignment**](VerticalAlignment.md) | Gets or sets vertical alignment of stamp on page. | [optional] @@ -20,7 +20,7 @@ Name | Type | Description | Notes **zoom** | **float** | Zooming factor of the stamp. Allows to scale stamp. | [optional] **text_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Alignment of the text inside the stamp. | [optional] **value** | **str** | Gets or sets string value which is used as stamp on the page. | [optional] -**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See for details. | [optional] +**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See TextState for details. | [optional] **file_name** | **str** | Gets or sets the file name. | [optional] **width** | **float** | Gets or sets image width. Setting this property allos to scal image horizontally. | [optional] **height** | **float** | Gets or sets image height. Setting this image allows to scale image vertically. | [optional] diff --git a/docs/StampAnnotation.md b/docs/StampAnnotation.md index b225138..433a983 100644 --- a/docs/StampAnnotation.md +++ b/docs/StampAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/StampBase.md b/docs/StampBase.md index 72e5a25..fe8fbde 100644 --- a/docs/StampBase.md +++ b/docs/StampBase.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] diff --git a/docs/StampInfo.md b/docs/StampInfo.md index 7683376..1afebce 100644 --- a/docs/StampInfo.md +++ b/docs/StampInfo.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] **text** | **str** | Get the text content. | [optional] **visible** | **bool** | Gets the stamp is visible. | [optional] -**stamp_type** | [**StampType**](StampType.md) | Gets stamp type. | [optional] +**stamp_type** | [**StampType**](StampType.md) | Gets stamp type. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/StorageExist.md b/docs/StorageExist.md new file mode 100644 index 0000000..226b5b3 --- /dev/null +++ b/docs/StorageExist.md @@ -0,0 +1,11 @@ +# StorageExist +Storage exists + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**exists** | **bool** | Shows that the storage exists. | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/StorageFile.md b/docs/StorageFile.md new file mode 100644 index 0000000..cb944a1 --- /dev/null +++ b/docs/StorageFile.md @@ -0,0 +1,15 @@ +# StorageFile +File or folder information + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | File or folder name. | [optional] +**is_folder** | **bool** | True if it is a folder. | +**modified_date** | **datetime** | File or folder last modified DateTime. | [optional] +**size** | **int** | File or folder size. | +**path** | **str** | File or folder path. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/StrikeOutAnnotation.md b/docs/StrikeOutAnnotation.md index 5e24798..4b41f18 100644 --- a/docs/StrikeOutAnnotation.md +++ b/docs/StrikeOutAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/Table.md b/docs/Table.md index 15d96e2..b64526f 100644 --- a/docs/Table.md +++ b/docs/Table.md @@ -13,7 +13,7 @@ Name | Type | Description | Notes **default_cell_text_state** | [**TextState**](TextState.md) | Gets or sets the default cell text state. | [optional] **default_cell_padding** | [**MarginInfo**](MarginInfo.md) | Gets or sets the default cell padding. | [optional] **border** | [**BorderInfo**](BorderInfo.md) | Gets or sets the border. | [optional] -**rows** | [**list[Row]**](Row.md) | Sets the rows of the table. | [optional] +**rows** | [**list[Row]**](Row.md) | Sets the rows of the table. | **default_column_width** | **str** | Gets default cell border; | [optional] **default_cell_border** | [**BorderInfo**](BorderInfo.md) | Gets default cell border; | [optional] **broken** | [**TableBroken**](TableBroken.md) | Gets or sets table vertial broken; | [optional] diff --git a/docs/TextAnnotation.md b/docs/TextAnnotation.md index e31a62c..af19c2b 100644 --- a/docs/TextAnnotation.md +++ b/docs/TextAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/TextFooter.md b/docs/TextFooter.md index 67518a5..6db8152 100644 --- a/docs/TextFooter.md +++ b/docs/TextFooter.md @@ -8,14 +8,14 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] **zoom** | **float** | Zooming factor of the stamp. Allows to scale stamp. | [optional] **text_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Alignment of the text inside the stamp. | [optional] **value** | **str** | Gets or sets string value which is used as stamp on the page. | [optional] -**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See for details. | [optional] +**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See TextState for details. | [optional] **bottom_margin** | **float** | Gets or sets bottom margin of stamp. | [optional] **left_margin** | **float** | Gets or sets left margin of stamp. | [optional] **right_margin** | **float** | Gets or sets right margin of stamp. | [optional] diff --git a/docs/TextHeader.md b/docs/TextHeader.md index fa05f7d..df70f3f 100644 --- a/docs/TextHeader.md +++ b/docs/TextHeader.md @@ -8,14 +8,14 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] **zoom** | **float** | Zooming factor of the stamp. Allows to scale stamp. | [optional] **text_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Alignment of the text inside the stamp. | [optional] **value** | **str** | Gets or sets string value which is used as stamp on the page. | [optional] -**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See for details. | [optional] +**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See TextState for details. | [optional] **left_margin** | **float** | Gets or sets left margin of stamp. | [optional] **top_margin** | **float** | Gets or sets top margin of stamp. | [optional] **right_margin** | **float** | Gets or sets right margin of stamp. | [optional] diff --git a/docs/TextRect.md b/docs/TextRect.md index 354617a..693e305 100644 --- a/docs/TextRect.md +++ b/docs/TextRect.md @@ -9,9 +9,9 @@ Name | Type | Description | Notes **rect** | [**Rectangle**](Rectangle.md) | Rectangle of the occurrence. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets a horizontal alignment of text fragment. | [optional] **vertical_alignment** | [**VerticalAlignment**](VerticalAlignment.md) | Gets or sets a vertical alignment of text fragment. | [optional] -**position** | [**Position**](Position.md) | Gets or sets text position for text, represented with object. | [optional] -**baseline_position** | [**Position**](Position.md) | Gets text position for text, represented with object. The YIndent of the Position structure represents baseline coordinate of the text fragment. | [optional] -**text_state** | [**TextState**](TextState.md) | Gets or sets text state for the text that object represents. | [optional] +**position** | [**Position**](Position.md) | Gets or sets text position for text, represented with TextRect object. | [optional] +**baseline_position** | [**Position**](Position.md) | Gets text position for text, represented with TextRect object. The YIndent of the Position structure represents baseline coordinate of the text fragment. | [optional] +**text_state** | [**TextState**](TextState.md) | Gets or sets text state for the text that TextRect object represents. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/TextReplaceListRequest.md b/docs/TextReplaceListRequest.md index 2054a34..9b66687 100644 --- a/docs/TextReplaceListRequest.md +++ b/docs/TextReplaceListRequest.md @@ -5,7 +5,7 @@ Multiple text replacements request. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **text_replaces** | [**list[TextReplace]**](TextReplace.md) | A list of text replacement settings. | -**default_font** | **str** | | [optional] +**default_font** | **str** | Name of font to use if requested font is not embedded into document. | [optional] **start_index** | **int** | The index of first match to be replaced. | [optional] **count_replace** | **int** | The number of matches to be replaced. | [optional] diff --git a/docs/TextReplaceResponse.md b/docs/TextReplaceResponse.md index 6677021..322e3e9 100644 --- a/docs/TextReplaceResponse.md +++ b/docs/TextReplaceResponse.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **code** | **int** | Response status code. | **status** | **str** | Response status. | [optional] -**matches** | **int** | Number of matches | [optional] +**matches** | **int** | Number of matches | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/TextStamp.md b/docs/TextStamp.md index 6ad7809..7f90977 100644 --- a/docs/TextStamp.md +++ b/docs/TextStamp.md @@ -8,14 +8,14 @@ Name | Type | Description | Notes **background** | **bool** | Sets or gets a bool value that indicates the content is stamped as background. If the value is true, the stamp content is layed at the bottom. By defalt, the value is false, the stamp content is layed at the top. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets or sets Horizontal alignment of stamp on the page. | [optional] **opacity** | **float** | Gets or sets a value to indicate the stamp opacity. The value is from 0.0 to 1.0. By default the value is 1.0. | [optional] -**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] +**rotate** | [**Rotation**](Rotation.md) | Sets or gets the rotation of stamp content according Rotation values. Note. This property is for set angles which are multiples of 90 degrees (0, 90, 180, 270 degrees). To set arbitrary angle use RotateAngle property. If angle set by ArbitraryAngle is not multiple of 90 then Rotate property returns Rotation.None. | [optional] **rotate_angle** | **float** | Gets or sets rotate angle of stamp in degrees. This property allows to set arbitrary rotate angle. | [optional] **x_indent** | **float** | Horizontal stamp coordinate, starting from the left. | [optional] **y_indent** | **float** | Vertical stamp coordinate, starting from the bottom. | [optional] **zoom** | **float** | Zooming factor of the stamp. Allows to scale stamp. | [optional] **text_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Alignment of the text inside the stamp. | [optional] **value** | **str** | Gets or sets string value which is used as stamp on the page. | [optional] -**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See for details. | [optional] +**text_state** | [**TextState**](TextState.md) | Gets text properties of the stamp. See TextState for details. | [optional] **vertical_alignment** | [**VerticalAlignment**](VerticalAlignment.md) | Gets or sets vertical alignment of stamp on page. | [optional] **bottom_margin** | **float** | Gets or sets bottom margin of stamp. | [optional] **left_margin** | **float** | Gets or sets left margin of stamp. | [optional] diff --git a/docs/UnderlineAnnotation.md b/docs/UnderlineAnnotation.md index db802ac..ab5d827 100644 --- a/docs/UnderlineAnnotation.md +++ b/docs/UnderlineAnnotation.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **id** | **str** | Gets ID of the annotation. | [optional] **flags** | [**list[AnnotationFlags]**](AnnotationFlags.md) | Gets Flags of the annotation. | [optional] **name** | **str** | Gets Name of the annotation. | [optional] -**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | [optional] +**rect** | [**Rectangle**](Rectangle.md) | Gets Rect of the annotation. | **page_index** | **int** | Gets PageIndex of the annotation. | [optional] **z_index** | **int** | Gets ZIndex of the annotation. | [optional] **horizontal_alignment** | [**HorizontalAlignment**](HorizontalAlignment.md) | Gets HorizontalAlignment of the annotation. | [optional] diff --git a/docs/WordCountResponse.md b/docs/WordCountResponse.md index 6aefc75..abf1959 100644 --- a/docs/WordCountResponse.md +++ b/docs/WordCountResponse.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **code** | **int** | Response status code. | **status** | **str** | Response status. | [optional] -**words_per_page** | [**WordCount**](WordCount.md) | with words per page info. | [optional] +**words_per_page** | [**WordCount**](WordCount.md) | WordCount with words per page info. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/setup.py b/setup.py index 46887bf..7ab8ce3 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ - OpenAPI spec version: 2.0 + OpenAPI spec version: 3.0 """ @@ -32,7 +32,7 @@ from setuptools import setup, find_packages NAME = "asposepdfcloud" -VERSION = "19.5.0" +VERSION = "19.7.0" # To install the library, run the following # # python setup.py install diff --git a/test/pdf_tests.py b/test/pdf_tests.py index 9e90062..e1589d9 100644 --- a/test/pdf_tests.py +++ b/test/pdf_tests.py @@ -63,7 +63,7 @@ def setUp(self): def uploadFile(self, name): - self.pdf_api.put_create(self.temp_folder + '/' + name, self.test_data_path + name) + self.pdf_api.upload_file(self.temp_folder + '/' + name, self.test_data_path + name) def tearDown(self): pass @@ -165,9 +165,8 @@ def testPostPageFileAttachmentAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.FileAttachmentAnnotation() + annotation = asposepdfcloud.models.FileAttachmentAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -179,7 +178,7 @@ def testPostPageFileAttachmentAnnotations(self): annotation.file_name = attachment_file response = self.pdf_api.post_page_file_attachment_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutFileAttachmentAnnotation(self): @@ -189,9 +188,8 @@ def testPutFileAttachmentAnnotation(self): attachment_file = '4pages.pdf' self.uploadFile(attachment_file) - annotation = asposepdfcloud.models.FileAttachmentAnnotation() + annotation = asposepdfcloud.models.FileAttachmentAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -207,7 +205,7 @@ def testPutFileAttachmentAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_file_attachment_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetFileAttachmentAnnotationData(self): file_name = 'PdfWithAnnotations.pdf' @@ -229,7 +227,7 @@ def testPutFileAttachmentAnnotationDataExtract(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_file_attachment_annotation_data_extract(file_name, annotation_id, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Stamp Tests @@ -290,7 +288,7 @@ def testPostPageTextStamps(self): stamp.text_state = text_state response = self.pdf_api.post_page_text_stamps(file_name, page_number, [stamp], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPostPageImageStamps(self): file_name = 'PageNumberStamp.pdf' @@ -318,7 +316,7 @@ def testPostPageImageStamps(self): stamp.file_name = self.temp_folder + '/' + image response = self.pdf_api.post_page_image_stamps(file_name, page_number, [stamp], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPostPagePdfPageStamps(self): file_name = 'PageNumberStamp.pdf' @@ -347,7 +345,7 @@ def testPostPagePdfPageStamps(self): stamp.page_index = 2 response = self.pdf_api.post_page_pdf_page_stamps(file_name, page_number, [stamp], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testDeleteStamp(self): file_name = 'PageNumberStamp.pdf' @@ -382,7 +380,7 @@ def testPostDocumentPageNumberStamps(self): stamp.value = 'Page #' response = self.pdf_api.post_document_page_number_stamps(name, stamp, start_page_number=2, end_page_number=3, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Header Footer Tests @@ -420,7 +418,7 @@ def testPostDocumentTextHeader(self): end_page_number = 3 response = self.pdf_api.post_document_text_header(file_name, header, start_page_number=start_page_number, end_page_number=end_page_number, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPostDocumentTextFooter(self): file_name = '4pages.pdf' @@ -456,7 +454,7 @@ def testPostDocumentTextFooter(self): end_page_number = 3 response = self.pdf_api.post_document_text_footer(file_name, footer, start_page_number=start_page_number, end_page_number=end_page_number, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPostDocumentImageHeader(self): file_name = '4pages.pdf' @@ -483,7 +481,7 @@ def testPostDocumentImageHeader(self): end_page_number = 3 response = self.pdf_api.post_document_image_header(file_name, header, start_page_number=start_page_number, end_page_number=end_page_number, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPostDocumentImageFooter(self): file_name = '4pages.pdf' @@ -510,7 +508,7 @@ def testPostDocumentImageFooter(self): end_page_number = 3 response = self.pdf_api.post_document_image_footer(file_name, footer, start_page_number=start_page_number, end_page_number=end_page_number, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Tables Tests @@ -576,7 +574,7 @@ def testPostPageTables(self): table = self.__drawTable() response = self.pdf_api.post_page_tables(file_name, page_number, [table], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutTable(self): file_name = 'PdfWithTable.pdf' @@ -589,7 +587,7 @@ def testPutTable(self): table = self.__drawTable() response = self.pdf_api.put_table(file_name, table_id, table, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def __drawTable(self): @@ -604,8 +602,7 @@ def __drawTable(self): num_of_cols = 5 num_of_rows = 5 - table = asposepdfcloud.models.Table() - table.rows = [] + table = asposepdfcloud.models.Table(rows = []) col_widths = '' for _ in range(num_of_cols): @@ -704,9 +701,8 @@ def testPostPageStampAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.StampAnnotation() + annotation = asposepdfcloud.models.StampAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -717,7 +713,7 @@ def testPostPageStampAnnotations(self): annotation.file_path = self.temp_folder + '/' + attachment_file response = self.pdf_api.post_page_stamp_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutStampAnnotation(self): @@ -727,9 +723,8 @@ def testPutStampAnnotation(self): attachment_file = '4pages.pdf' self.uploadFile(attachment_file) - annotation = asposepdfcloud.models.StampAnnotation() + annotation = asposepdfcloud.models.StampAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -744,7 +739,7 @@ def testPutStampAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_stamp_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetStampAnnotationData(self): file_name = 'PdfWithAnnotations.pdf' @@ -766,7 +761,7 @@ def testPutStampAnnotationDataExtract(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_stamp_annotation_data_extract(file_name, annotation_id, out_file_path='stamp.dat', folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Screen Annotations Tests @@ -807,9 +802,8 @@ def testPostPageScreenAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.ScreenAnnotation() + annotation = asposepdfcloud.models.ScreenAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -818,7 +812,7 @@ def testPostPageScreenAnnotations(self): annotation.file_path = self.temp_folder + '/' + attachment_file response = self.pdf_api.post_page_screen_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutScreenAnnotation(self): @@ -828,9 +822,8 @@ def testPutScreenAnnotation(self): attachment_file = 'ScreenMovie.swf' self.uploadFile(attachment_file) - annotation = asposepdfcloud.models.ScreenAnnotation() + annotation = asposepdfcloud.models.ScreenAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -843,7 +836,7 @@ def testPutScreenAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_screen_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetScreenAnnotationData(self): file_name = 'PdfWithScreenAnnotations.pdf' @@ -866,7 +859,7 @@ def testPutScreenAnnotationDataExtract(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_screen_annotation_data_extract(file_name, annotation_id, out_file_path, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Sound Annotations Tests @@ -907,9 +900,8 @@ def testPostPageSoundAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.SoundAnnotation() + annotation = asposepdfcloud.models.SoundAnnotation(rect=asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -920,7 +912,7 @@ def testPostPageSoundAnnotations(self): annotation.file_path = self.temp_folder + '/' + attachment_file response = self.pdf_api.post_page_sound_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutSoundAnnotation(self): @@ -930,9 +922,8 @@ def testPutSoundAnnotation(self): attachment_file = '4pages.pdf' self.uploadFile(attachment_file) - annotation = asposepdfcloud.models.SoundAnnotation() + annotation = asposepdfcloud.models.SoundAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -947,7 +938,7 @@ def testPutSoundAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_sound_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetSoundAnnotationData(self): file_name = 'PdfWithAnnotations.pdf' @@ -969,7 +960,7 @@ def testPutSoundAnnotationDataExtract(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_sound_annotation_data_extract(file_name, annotation_id, out_file_path="outFile.dat", folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Redaction Annotations Tests @@ -1007,9 +998,8 @@ def testPostPageRedactionAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.RedactionAnnotation() + annotation = asposepdfcloud.models.RedactionAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -1020,7 +1010,7 @@ def testPostPageRedactionAnnotations(self): annotation.modified = '01/01/2018 12:00:00.000 AM' response = self.pdf_api.post_page_redaction_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutRedactionAnnotation(self): @@ -1029,9 +1019,8 @@ def testPutRedactionAnnotation(self): page_number = 1 - annotation = asposepdfcloud.models.RedactionAnnotation() + annotation = asposepdfcloud.models.RedactionAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -1042,14 +1031,14 @@ def testPutRedactionAnnotation(self): annotation.modified = '01/01/2018 12:01:02.000 AM' response = self.pdf_api.post_page_redaction_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) response_annotations = self.pdf_api.get_document_redaction_annotations(file_name, folder=self.temp_folder) self.assertEqual(response_annotations.code, 200) annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_redaction_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Movie Annotations Tests @@ -1090,9 +1079,8 @@ def testPostPageMovieAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.MovieAnnotation() + annotation = asposepdfcloud.models.MovieAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -1100,7 +1088,7 @@ def testPostPageMovieAnnotations(self): annotation.file_path = self.temp_folder + '/' + attachment_file response = self.pdf_api.post_page_movie_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutMovieAnnotation(self): @@ -1110,9 +1098,8 @@ def testPutMovieAnnotation(self): attachment_file = '4pages.pdf' self.uploadFile(attachment_file) - annotation = asposepdfcloud.models.MovieAnnotation() + annotation = asposepdfcloud.models.MovieAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -1124,7 +1111,7 @@ def testPutMovieAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_movie_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # PolyLine Annotations Tests @@ -1160,53 +1147,50 @@ def testPostPagePolyLineAnnotations(self): self.uploadFile(file_name) page_number = 1 - - annotation = asposepdfcloud.models.PolyLineAnnotation() + vertices = [ + asposepdfcloud.models.Point(10, 10), + asposepdfcloud.models.Point(20, 10), + asposepdfcloud.models.Point(10, 20), + asposepdfcloud.models.Point(10, 10) + ] + annotation = asposepdfcloud.models.PolyLineAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), vertices = vertices) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' annotation.subject = 'Subj' annotation.z_index = 1 annotation.title = 'Title' - annotation.vertices = [ - asposepdfcloud.models.Point(10, 10), - asposepdfcloud.models.Point(20, 10), - asposepdfcloud.models.Point(10, 20), - asposepdfcloud.models.Point(10, 10) - ] + response = self.pdf_api.post_page_poly_line_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPolyLineAnnotation(self): file_name = 'PdfWithAnnotations.pdf' self.uploadFile(file_name) + vertices = [ + asposepdfcloud.models.Point(10, 10), + asposepdfcloud.models.Point(20, 10), + asposepdfcloud.models.Point(10, 20), + asposepdfcloud.models.Point(10, 10) + ] - - annotation = asposepdfcloud.models.PolyLineAnnotation() + annotation = asposepdfcloud.models.PolyLineAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), vertices = vertices) annotation.name = 'Test Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text Updated' annotation.subject = 'Subj Updated' annotation.z_index = 1 annotation.title = 'Title Updated' - annotation.vertices = [ - asposepdfcloud.models.Point(10, 10), - asposepdfcloud.models.Point(20, 10), - asposepdfcloud.models.Point(10, 20), - asposepdfcloud.models.Point(10, 10) - ] response_annotations = self.pdf_api.get_document_poly_line_annotations(file_name, folder=self.temp_folder) self.assertEqual(response_annotations.code, 200) annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_poly_line_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Polygon Annotations Tests @@ -1242,10 +1226,14 @@ def testPostPagePolygonAnnotations(self): self.uploadFile(file_name) page_number = 1 - - annotation = asposepdfcloud.models.PolygonAnnotation() + vertices = [ + asposepdfcloud.models.Point(10, 10), + asposepdfcloud.models.Point(20, 10), + asposepdfcloud.models.Point(10, 20), + asposepdfcloud.models.Point(10, 10) + ] + annotation = asposepdfcloud.models.PolygonAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), vertices = vertices) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1260,35 +1248,34 @@ def testPostPagePolygonAnnotations(self): ] response = self.pdf_api.post_page_polygon_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPolygonAnnotation(self): file_name = 'PdfWithAnnotations.pdf' self.uploadFile(file_name) + + vertices = [ + asposepdfcloud.models.Point(10, 10), + asposepdfcloud.models.Point(20, 10), + asposepdfcloud.models.Point(10, 20), + asposepdfcloud.models.Point(10, 10) + ] - - annotation = asposepdfcloud.models.PolygonAnnotation() + annotation = asposepdfcloud.models.PolygonAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), vertices = vertices) annotation.name = 'Test Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text Updated' annotation.subject = 'Subj Updated' annotation.z_index = 1 annotation.title = 'Title Updated' - annotation.vertices = [ - asposepdfcloud.models.Point(10, 10), - asposepdfcloud.models.Point(20, 10), - asposepdfcloud.models.Point(10, 20), - asposepdfcloud.models.Point(10, 10) - ] response_annotations = self.pdf_api.get_document_polygon_annotations(file_name, folder=self.temp_folder) self.assertEqual(response_annotations.code, 200) annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_polygon_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Circle Annotations Tests @@ -1325,9 +1312,8 @@ def testPostPageCircleAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.CircleAnnotation() + annotation = asposepdfcloud.models.CircleAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1336,7 +1322,7 @@ def testPostPageCircleAnnotations(self): annotation.title = 'Title' response = self.pdf_api.post_page_circle_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutCircleAnnotation(self): @@ -1344,9 +1330,8 @@ def testPutCircleAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.CircleAnnotation() + annotation = asposepdfcloud.models.CircleAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text Updated' @@ -1359,7 +1344,7 @@ def testPutCircleAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_circle_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Square Annotations Tests @@ -1396,9 +1381,8 @@ def testPostPageSquareAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.SquareAnnotation() + annotation = asposepdfcloud.models.SquareAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1407,7 +1391,7 @@ def testPostPageSquareAnnotations(self): annotation.title = 'Title' response = self.pdf_api.post_page_square_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutSquareAnnotation(self): @@ -1415,9 +1399,8 @@ def testPutSquareAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.SquareAnnotation() + annotation = asposepdfcloud.models.SquareAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text Updated' @@ -1430,7 +1413,7 @@ def testPutSquareAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_square_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Line Annotations Tests @@ -1468,19 +1451,18 @@ def testPostPageLineAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.LineAnnotation() + annotation = asposepdfcloud.models.LineAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), + starting = asposepdfcloud.models.Point(10, 10), + ending = asposepdfcloud.models.Point(100, 100)) annotation.name = 'Test Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' annotation.subject = 'Subj' annotation.z_index = 1 - annotation.starting = asposepdfcloud.models.Point(10, 10) - annotation.ending = asposepdfcloud.models.Point(100, 100) response = self.pdf_api.post_page_line_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutLineAnnotation(self): @@ -1488,23 +1470,22 @@ def testPutLineAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.LineAnnotation() + annotation = asposepdfcloud.models.LineAnnotation(rect=asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), + starting=asposepdfcloud.models.Point(10, 10), + ending=asposepdfcloud.models.Point(100, 100)) annotation.name = 'Test Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text Updated' annotation.subject = 'Subj Updated' annotation.z_index = 1 - annotation.starting = asposepdfcloud.models.Point(10, 10) - annotation.ending = asposepdfcloud.models.Point(100, 100) response_annotations = self.pdf_api.get_document_line_annotations(file_name, folder=self.temp_folder) self.assertEqual(response_annotations.code, 200) annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_line_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Free Text Annotations Tests @@ -1545,10 +1526,8 @@ def testPostPageFreeTextAnnotations(self): foreground_color=asposepdfcloud.models.Color(a=0xFF, r=0, g=0xFF, b=0), background_color=asposepdfcloud.models.Color(a=0xFF, r=0xFF, g=0, b=0)) - annotation = asposepdfcloud.models.FreeTextAnnotation() + annotation = asposepdfcloud.models.FreeTextAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), text_style = text_style) annotation.name = 'Test Free Text' - annotation.text_style = text_style - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.intent = asposepdfcloud.models.FreeTextIntent.FREETEXTTYPEWRITER @@ -1559,7 +1538,7 @@ def testPostPageFreeTextAnnotations(self): annotation.title = 'Title' response = self.pdf_api.post_page_free_text_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutFreeTextAnnotation(self): @@ -1571,10 +1550,8 @@ def testPutFreeTextAnnotation(self): foreground_color=asposepdfcloud.models.Color(a=0xFF, r=0, g=0xFF, b=0), background_color=asposepdfcloud.models.Color(a=0xFF, r=0xFF, g=0, b=0)) - annotation = asposepdfcloud.models.FreeTextAnnotation() + annotation = asposepdfcloud.models.FreeTextAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200), text_style = text_style) annotation.name = 'Test Free Text' - annotation.text_style = text_style - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.intent = asposepdfcloud.models.FreeTextIntent.FREETEXTTYPEWRITER @@ -1589,7 +1566,7 @@ def testPutFreeTextAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_free_text_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Text Annotations Tests @@ -1626,9 +1603,8 @@ def testPostPageTextAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.TextAnnotation() + annotation = asposepdfcloud.models.TextAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Free Text' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1638,7 +1614,7 @@ def testPostPageTextAnnotations(self): annotation.state = asposepdfcloud.models.AnnotationState.UNDEFINED response = self.pdf_api.post_page_text_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutTextAnnotation(self): @@ -1646,9 +1622,8 @@ def testPutTextAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.TextAnnotation() + annotation = asposepdfcloud.models.TextAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Test Free Text' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1662,7 +1637,7 @@ def testPutTextAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_text_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Highlight Annotations Tests @@ -1700,9 +1675,8 @@ def testPostPageHighlightAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.HighlightAnnotation() + annotation = asposepdfcloud.models.HighlightAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1718,7 +1692,7 @@ def testPostPageHighlightAnnotations(self): annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_page_highlight_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutHighlightAnnotation(self): @@ -1726,9 +1700,8 @@ def testPutHighlightAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.HighlightAnnotation() + annotation = asposepdfcloud.models.HighlightAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Text Updated' @@ -1748,7 +1721,7 @@ def testPutHighlightAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_highlight_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Underline Annotations Tests @@ -1786,9 +1759,8 @@ def testPostPageUnderlineAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.UnderlineAnnotation() + annotation = asposepdfcloud.models.UnderlineAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1804,7 +1776,7 @@ def testPostPageUnderlineAnnotations(self): annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_page_underline_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutUnderlineAnnotation(self): @@ -1812,9 +1784,8 @@ def testPutUnderlineAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.UnderlineAnnotation() + annotation = asposepdfcloud.models.UnderlineAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Text Updated' @@ -1834,7 +1805,7 @@ def testPutUnderlineAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_underline_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Squiggly Annotations Tests @@ -1871,9 +1842,8 @@ def testPostPageSquigglyAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.SquigglyAnnotation() + annotation = asposepdfcloud.models.SquigglyAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1889,7 +1859,7 @@ def testPostPageSquigglyAnnotations(self): annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_page_squiggly_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutSquigglyAnnotation(self): @@ -1897,9 +1867,8 @@ def testPutSquigglyAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.SquigglyAnnotation() + annotation = asposepdfcloud.models.SquigglyAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Text Updated' @@ -1919,7 +1888,7 @@ def testPutSquigglyAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_squiggly_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # StrikeOut Annotations Tests @@ -1957,9 +1926,8 @@ def testPostPageStrikeOutAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.StrikeOutAnnotation() + annotation = asposepdfcloud.models.StrikeOutAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -1975,7 +1943,7 @@ def testPostPageStrikeOutAnnotations(self): annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_page_strike_out_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutStrikeOutAnnotation(self): @@ -1983,9 +1951,8 @@ def testPutStrikeOutAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.StrikeOutAnnotation() + annotation = asposepdfcloud.models.StrikeOutAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Text Updated' @@ -2005,7 +1972,7 @@ def testPutStrikeOutAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_strike_out_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Caret Annotations Tests @@ -2042,9 +2009,8 @@ def testPostPageCaretAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.CaretAnnotation() + annotation = asposepdfcloud.models.CaretAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -2055,7 +2021,7 @@ def testPostPageCaretAnnotations(self): annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_page_caret_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutCaretAnnotation(self): @@ -2063,9 +2029,8 @@ def testPutCaretAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.CaretAnnotation() + annotation = asposepdfcloud.models.CaretAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Text Updated' @@ -2080,7 +2045,7 @@ def testPutCaretAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_caret_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Ink Annotations Tests @@ -2118,9 +2083,8 @@ def testPostPageInkAnnotations(self): page_number = 1 - annotation = asposepdfcloud.models.InkAnnotation() + annotation = asposepdfcloud.models.InkAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Rich Text' @@ -2142,7 +2106,7 @@ def testPostPageInkAnnotations(self): annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_page_ink_annotations(file_name, page_number, [annotation], folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutInkAnnotation(self): @@ -2150,9 +2114,8 @@ def testPutInkAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.InkAnnotation() + annotation = asposepdfcloud.models.InkAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.rich_text = 'Text Updated' @@ -2178,7 +2141,7 @@ def testPutInkAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_ink_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Popup Annotations Tests @@ -2224,16 +2187,15 @@ def testPostPopupAnnotation(self): parent_id = 'GI5TCMR3GE2TQLBSGM3CYMJYGUWDENRV' - annotation = asposepdfcloud.models.PopupAnnotation() + annotation = asposepdfcloud.models.PopupAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 annotation.modified = '02/02/2018 00:00:00.000 AM' response = self.pdf_api.post_popup_annotation(file_name, parent_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPopupAnnotation(self): @@ -2241,9 +2203,8 @@ def testPutPopupAnnotation(self): self.uploadFile(file_name) - annotation = asposepdfcloud.models.PopupAnnotation() + annotation = asposepdfcloud.models.PopupAnnotation(rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200)) annotation.name = 'Name Updated' - annotation.rect = asposepdfcloud.models.Rectangle(llx=100, lly=100, urx=200, ury=200) annotation.flags = [asposepdfcloud.models.AnnotationFlags.DEFAULT] annotation.horizontal_alignment = asposepdfcloud.models.HorizontalAlignment.CENTER annotation.z_index = 1 @@ -2254,11 +2215,11 @@ def testPutPopupAnnotation(self): annotation_id = response_annotations.annotations.list[0].id response = self.pdf_api.put_popup_annotation(file_name, annotation_id, annotation, folder=self.temp_folder) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Append Tests - def testPostAppendDocumentUsingQueryParams(self): + def testPostAppendDocument(self): file_name = 'PdfWithImages2.pdf' append_file_name = '4pages.pdf' @@ -2276,25 +2237,6 @@ def testPostAppendDocumentUsingQueryParams(self): self.assertEqual(response.code, 200) - def testPostAppendDocumentUsingBodyParams(self): - file_name = 'PdfWithImages2.pdf' - append_file_name = '4pages.pdf' - - self.uploadFile(file_name) - self.uploadFile(append_file_name) - - append_document = asposepdfcloud.models.AppendDocument(self.temp_folder + '/' + append_file_name, start_page=2, end_page=4) - - - opts = { - "append_document" : append_document, - "folder" : self.temp_folder - } - - response = self.pdf_api.post_append_document(file_name, **opts) - self.assertEqual(response.code, 200) - - # Attachments Tests def testGetDocumentAttachmentByIndex(self): @@ -2361,7 +2303,7 @@ def testPutPdfInStorageToDoc(self): } response = self.pdf_api.put_pdf_in_storage_to_doc(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToDoc(self): @@ -2373,7 +2315,7 @@ def testPutPdfInRequestToDoc(self): } response = self.pdf_api.put_pdf_in_request_to_doc(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To PDFA @@ -2404,7 +2346,7 @@ def testPutPdfInStorageToPdfA(self): self.temp_folder + '/' + result_file_name, asposepdfcloud.models.PdfAType.PDFA1A, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToPdfA(self): @@ -2419,7 +2361,7 @@ def testPutPdfInRequestToPdfA(self): self.temp_folder + '/' + result_file_name, asposepdfcloud.models.PdfAType.PDFA1A, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To Tiff def testGetPdfInStorageToTiff(self): @@ -2444,7 +2386,7 @@ def testPutPdfInStorageToTiff(self): } response = self.pdf_api.put_pdf_in_storage_to_tiff(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToTiff(self): @@ -2456,7 +2398,7 @@ def testPutPdfInRequestToTiff(self): } response = self.pdf_api.put_pdf_in_request_to_tiff(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To SVG @@ -2483,7 +2425,7 @@ def testPutPdfInStorageToSvg(self): } response = self.pdf_api.put_pdf_in_storage_to_svg(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToSvg(self): @@ -2495,7 +2437,7 @@ def testPutPdfInRequestToSvg(self): } response = self.pdf_api.put_pdf_in_request_to_svg(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To XPS @@ -2521,7 +2463,7 @@ def testPutPdfInStorageToXps(self): } response = self.pdf_api.put_pdf_in_storage_to_xps(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToXps(self): @@ -2533,7 +2475,7 @@ def testPutPdfInRequestToXps(self): } response = self.pdf_api.put_pdf_in_request_to_xps(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To XLS def testGetPdfInStorageToXls(self): @@ -2558,7 +2500,7 @@ def testPutPdfInStorageToXls(self): } response = self.pdf_api.put_pdf_in_storage_to_xls(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToXls(self): @@ -2570,7 +2512,7 @@ def testPutPdfInRequestToXls(self): } response = self.pdf_api.put_pdf_in_request_to_xls(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To XLSX def testGetPdfInStorageToXlsx(self): @@ -2595,7 +2537,7 @@ def testPutPdfInStorageToXlsx(self): } response = self.pdf_api.put_pdf_in_storage_to_xlsx(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToXlsx(self): @@ -2607,7 +2549,7 @@ def testPutPdfInRequestToXlsx(self): } response = self.pdf_api.put_pdf_in_request_to_xlsx(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To HTML def testGetPdfInStorageToHtml(self): @@ -2632,7 +2574,7 @@ def testPutPdfInStorageToHtml(self): } response = self.pdf_api.put_pdf_in_storage_to_html(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToHtml(self): @@ -2644,7 +2586,7 @@ def testPutPdfInRequestToHtml(self): } response = self.pdf_api.put_pdf_in_request_to_html(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To EPUB @@ -2670,7 +2612,7 @@ def testPutPdfInStorageToEpub(self): } response = self.pdf_api.put_pdf_in_storage_to_epub(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToEpub(self): @@ -2682,7 +2624,7 @@ def testPutPdfInRequestToEpub(self): } response = self.pdf_api.put_pdf_in_request_to_epub(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To PPTX @@ -2708,7 +2650,7 @@ def testPutPdfInStorageToPptx(self): } response = self.pdf_api.put_pdf_in_storage_to_pptx(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToPptx(self): @@ -2720,7 +2662,7 @@ def testPutPdfInRequestToPptx(self): } response = self.pdf_api.put_pdf_in_request_to_pptx(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To LaTeX @@ -2746,7 +2688,7 @@ def testPutPdfInStorageToLaTeX(self): } response = self.pdf_api.put_pdf_in_storage_to_la_te_x(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToLaTeX(self): @@ -2758,7 +2700,7 @@ def testPutPdfInRequestToLaTeX(self): } response = self.pdf_api.put_pdf_in_request_to_la_te_x(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To Mobi Xml @@ -2784,7 +2726,7 @@ def testPutPdfInStorageToMobiXml(self): } response = self.pdf_api.put_pdf_in_storage_to_mobi_xml(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToMobiXml(self): @@ -2796,7 +2738,7 @@ def testPutPdfInRequestToMobiXml(self): } response = self.pdf_api.put_pdf_in_request_to_mobi_xml(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # PDF Xfa To Acro Form @@ -2822,7 +2764,7 @@ def testPutXfaPdfInStorageToAcroForm(self): } response = self.pdf_api.put_xfa_pdf_in_storage_to_acro_form(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutXfaPdfInRequestToAcroForm(self): @@ -2834,7 +2776,7 @@ def testPutXfaPdfInRequestToAcroForm(self): } response = self.pdf_api.put_xfa_pdf_in_request_to_acro_form(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # To Xml @@ -2860,7 +2802,7 @@ def testPutPdfInStorageToXml(self): } response = self.pdf_api.put_pdf_in_storage_to_xml(file_name, self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutPdfInRequestToXml(self): @@ -2872,7 +2814,7 @@ def testPutPdfInRequestToXml(self): } response = self.pdf_api.put_pdf_in_request_to_xml(self.temp_folder + '/' + result_file_name, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Convert to PDF Tests @@ -2896,7 +2838,7 @@ def testPutEpubInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_epub_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetWebInStorageToPdf(self): @@ -2914,12 +2856,12 @@ def testPutWebInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_web_in_storage_to_pdf(result_name, url, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetLaTeXInStorageToPdf(self): - file_name = 'TexExample.tex' + file_name = 'sample.tex' self.uploadFile(file_name) src_path = self.temp_folder + '/' + file_name @@ -2928,7 +2870,7 @@ def testGetLaTeXInStorageToPdf(self): def testPutLaTeXInStorageToPdf(self): - file_name = 'TexExample.tex' + file_name = 'sample.tex' self.uploadFile(file_name) result_name = 'fromTex.pdf' @@ -2937,7 +2879,7 @@ def testPutLaTeXInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_la_te_x_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetMhtInStorageToPdf(self): @@ -2959,7 +2901,7 @@ def testPutMhtInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_mht_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) @@ -2993,7 +2935,7 @@ def testPutHtmlInStorageToPdf(self): "html_file_name": html_file_name } response = self.pdf_api.put_html_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetXslFoInStorageToPdf(self): @@ -3015,7 +2957,7 @@ def testPutXslFoInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_xsl_fo_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) @@ -3038,7 +2980,7 @@ def testPutXpsInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_xps_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) @@ -3061,7 +3003,7 @@ def testPutSvgInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_svg_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetPclInStorageToPdf(self): @@ -3083,7 +3025,7 @@ def testPutPclInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_pcl_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) @@ -3106,7 +3048,7 @@ def testPutXmlInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_xml_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testGetPsInStorageToPdf(self): file_name = 'Typography.PS' @@ -3127,7 +3069,7 @@ def testPutPsInStorageToPdf(self): "dst_folder" : self.temp_folder } response = self.pdf_api.put_ps_in_storage_to_pdf(result_name, src_path, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutImageInStorageToPdf(self): data_file_1 = "33539.jpg" @@ -3152,7 +3094,7 @@ def testPutImageInStorageToPdf(self): } response = self.pdf_api.put_image_in_storage_to_pdf(result_name, image_templates_request, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) # Document Tests @@ -3247,9 +3189,8 @@ def testPostCreateField(self): rect = asposepdfcloud.models.Rectangle(50, 200, 200, 400) - field = asposepdfcloud.models.Field() + field = asposepdfcloud.models.Field(values = ['1']) field.name = 'checkboxfield' - field.values = ['1'] field.type = 'Boolean' field.rect = rect @@ -3270,9 +3211,8 @@ def testPutUpdateField(self): field_name = 'textField' - field = asposepdfcloud.models.Field() + field = asposepdfcloud.models.Field(values = ['Text field updated value.']) field.name = field_name - field.values = ['Text field updated value.'] field.type = asposepdfcloud.models.FieldType.TEXT opts = { @@ -3290,13 +3230,11 @@ def testPutUpdateFields(self): field_name = 'textField' - field = asposepdfcloud.models.Field() + field = asposepdfcloud.models.Field(values = ['Text field updated value.']) field.name = field_name - field.values = ['Text field updated value.'] field.type = asposepdfcloud.models.FieldType.TEXT - fields = asposepdfcloud.models.Fields() - fields.list = [field] + fields = asposepdfcloud.models.Fields(list = [field]) opts = { "fields" : fields, @@ -3436,7 +3374,7 @@ def testPostInsertImage(self): } response = self.pdf_api.post_insert_image(file_name, page_number, llx, lly, urx, ury, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutImagesExtractAsJpeg(self): name = "PdfWithImages2.pdf" @@ -3690,13 +3628,13 @@ def testPostPageLinkAnnotations(self): rect = asposepdfcloud.models.Rectangle(100, 100, 500, 500) - linkAnnotation = asposepdfcloud.models.LinkAnnotation() - linkAnnotation.action_type = asposepdfcloud.models.LinkActionType.GOTOURIACTION - linkAnnotation.action = "https://products.aspose.cloud/pdf" - linkAnnotation.rect = rect + linkAnnotation = asposepdfcloud.models.LinkAnnotation(action_type=asposepdfcloud.models.LinkActionType.GOTOURIACTION, + action="https://products.aspose.cloud/pdf", + highlighting=asposepdfcloud.models.LinkHighlightingMode.NONE, + rect = rect) response = self.pdf_api.post_page_link_annotations(file_name, page_number, [linkAnnotation], **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testPutLinkAnnotation(self): file_name = 'PdfWithLinks.pdf' @@ -3713,13 +3651,13 @@ def testPutLinkAnnotation(self): rect = asposepdfcloud.models.Rectangle(100, 100, 500, 500) - linkAnnotation = asposepdfcloud.models.LinkAnnotation() - linkAnnotation.action_type = asposepdfcloud.models.LinkActionType.GOTOURIACTION - linkAnnotation.action = "https://products.aspose.cloud/pdf" - linkAnnotation.rect = rect + linkAnnotation = asposepdfcloud.models.LinkAnnotation(action_type=asposepdfcloud.models.LinkActionType.GOTOURIACTION, + action="https://products.aspose.cloud/pdf", + highlighting=asposepdfcloud.models.LinkHighlightingMode.NONE, + rect = rect) response = self.pdf_api.put_link_annotation(file_name, link_id, linkAnnotation, **opts) - self.assertEqual(response.code, 201) + self.assertEqual(response.code, 200) def testDeletePageLinkAnnotations(self): file_name = 'PdfWithLinks.pdf' @@ -4096,20 +4034,18 @@ def testDeleteProperties(self): file_name = 'PdfWithAcroForm.pdf' self.uploadFile(file_name) - property_1 = asposepdfcloud.models.DocumentProperty() - property_1.name = 'prop1' - property_1.value = 'val1' + property_1_name = 'prop1' + property_1_value = 'val1' opts = { "folder" : self.temp_folder } - property_2 = asposepdfcloud.models.DocumentProperty() - property_2.name = 'prop2' - property_2.value = 'val2' + property_2_name = 'prop2' + property_2_value = 'val2' - self.pdf_api.put_set_property(file_name, property_1.name, property_1.value, **opts) - self.pdf_api.put_set_property(file_name, property_2.name, property_2.value, **opts) + self.pdf_api.put_set_property(file_name, property_1_name, property_1_value, **opts) + self.pdf_api.put_set_property(file_name, property_2_name, property_2_value, **opts) response = self.pdf_api.delete_properties(file_name, **opts) self.assertEqual(response.code, 200) @@ -4119,17 +4055,16 @@ def testDeleteProperty(self): file_name = 'PdfWithAcroForm.pdf' self.uploadFile(file_name) - property_1 = asposepdfcloud.models.DocumentProperty() - property_1.name = 'prop1' - property_1.value = 'val1' + property_1_name = 'prop1' + property_1_value = 'val1' opts = { "folder" : self.temp_folder } - self.pdf_api.put_set_property(file_name, property_1.name, property_1.value, **opts) + self.pdf_api.put_set_property(file_name, property_1_name, property_1_value, **opts) - response = self.pdf_api.delete_property(file_name, property_1.name, **opts) + response = self.pdf_api.delete_property(file_name, property_1_name, **opts) self.assertEqual(response.code, 200) @@ -4137,20 +4072,18 @@ def testGetDocumentProperties(self): file_name = 'PdfWithAcroForm.pdf' self.uploadFile(file_name) - property_1 = asposepdfcloud.models.DocumentProperty() - property_1.name = 'prop1' - property_1.value = 'val1' + property_1_name = 'prop1' + property_1_value = 'val1' opts = { "folder" : self.temp_folder } - property_2 = asposepdfcloud.models.DocumentProperty() - property_2.name = 'prop2' - property_2.value = 'val2' + property_2_name = 'prop2' + property_2_value = 'val2' - self.pdf_api.put_set_property(file_name, property_1.name, property_1.value, **opts) - self.pdf_api.put_set_property(file_name, property_2.name, property_2.value, **opts) + self.pdf_api.put_set_property(file_name, property_1_name, property_1_value, **opts) + self.pdf_api.put_set_property(file_name, property_2_name, property_2_value, **opts) response = self.pdf_api.get_document_properties(file_name, **opts) self.assertEqual(response.code, 200) @@ -4160,17 +4093,16 @@ def testGetDocumentProperty(self): file_name = 'PdfWithAcroForm.pdf' self.uploadFile(file_name) - property_1 = asposepdfcloud.models.DocumentProperty() - property_1.name = 'prop1' - property_1.value = 'val1' + property_1_name = 'prop1' + property_1_value = 'val1' opts = { "folder" : self.temp_folder } - self.pdf_api.put_set_property(file_name, property_1.name, property_1.value, **opts) + self.pdf_api.put_set_property(file_name, property_1_name, property_1_value, **opts) - response = self.pdf_api.get_document_property(file_name, property_1.name, **opts) + response = self.pdf_api.get_document_property(file_name, property_1_name, **opts) self.assertEqual(response.code, 200) @@ -4178,15 +4110,14 @@ def testPutSetProperty(self): file_name = 'PdfWithAcroForm.pdf' self.uploadFile(file_name) - property_1 = asposepdfcloud.models.DocumentProperty() - property_1.name = 'prop1' - property_1.value = 'val1' + property_1_name = 'prop1' + property_1_value = 'val1' opts = { "folder" : self.temp_folder } - response = self.pdf_api.put_set_property(file_name, property_1.name, property_1.value, **opts) + response = self.pdf_api.put_set_property(file_name, property_1_name, property_1_value, **opts) self.assertEqual(response.code, 200) @@ -4215,7 +4146,7 @@ def testPostSignDocument(self): show_properties=False) opts = { - "signature" : signature, + "sign" : signature, "folder" : self.temp_folder } @@ -4248,7 +4179,7 @@ def testPostSignPage(self): show_properties=False) opts = { - "signature" : signature, + "sign" : signature, "folder" : self.temp_folder } @@ -4278,7 +4209,7 @@ def testGetVerifySignature(self): show_properties=False) opts = { - "signature" : signature, + "sign" : signature, "folder" : self.temp_folder } @@ -4524,30 +4455,28 @@ def testPutAddText(self): # Storage Tests - - def testPutCreate(self): + def testUploadFile(self): file_name = '4pages.pdf' - response = self.pdf_api.put_create(self.temp_folder + '/' + file_name, self.test_data_path + file_name) - self.assertEqual(response.code, 200) + response = self.pdf_api.upload_file(self.temp_folder + '/' + file_name, self.test_data_path + file_name) + self.assertEqual(len(response.uploaded), 1) - def testGetDownload(self): + def testDownloadFile(self): file_name = '4pages.pdf' self.uploadFile(file_name) - response = self.pdf_api.get_download(self.temp_folder + '/' + file_name) + response = self.pdf_api.download_file(self.temp_folder + '/' + file_name) self.assertIsInstance(response, str) - def testGetListFiles(self): - response = self.pdf_api.get_list_files(path=self.temp_folder) - self.assertEqual(response.code, 200) + def testGetFilesList(self): + response = self.pdf_api.get_files_list(path=self.temp_folder) + self.assertGreater(len(response.value), 0) - def testPostMoveFile(self): + def testMoveFile(self): file_name = '4pages.pdf' self.uploadFile(file_name) src = self.temp_folder + '/' + file_name dest = self.temp_folder + '/4pages_renamed.pdf' - response = self.pdf_api.post_move_file(src, dest) - self.assertEqual(response.code, 200) + response = self.pdf_api.move_file(src, dest) def testDeleteFile(self): file_name = '4pages.pdf' @@ -4555,60 +4484,381 @@ def testDeleteFile(self): path = self.temp_folder + '/' + file_name response = self.pdf_api.delete_file(path) - self.assertEqual(response.code, 200) - def testPutCreateFolder(self): + def testCreateFolder(self): path = self.temp_folder + '/testFolder' - response = self.pdf_api.put_create_folder(path) - self.assertEqual(response.code, 200) + response = self.pdf_api.create_folder(path) - def testPostMoveFolder(self): + def testMoveFolder(self): src = self.temp_folder + '/testFolder' - response_create_folder = self.pdf_api.put_create_folder(src) - self.assertEqual(response_create_folder.code, 200) - + response_create_folder = self.pdf_api.create_folder(src) dest = self.temp_folder + '/testFolderRednamed' - - response = self.pdf_api.post_move_folder(src, dest) - self.assertEqual(response.code, 200) - + response = self.pdf_api.move_folder(src, dest) + def testDeleteFolder(self): path = self.temp_folder + '/testFolder' - response_create_folder = self.pdf_api.put_create_folder(path) - self.assertEqual(response_create_folder.code, 200) - + response_create_folder = self.pdf_api.create_folder(path) response = self.pdf_api.delete_folder(path) - self.assertEqual(response.code, 200) - def testGetIsStorageExist(self): + def testStorageExists(self): name = 'PDF-CI' - response = self.pdf_api.get_is_storage_exist(name) - self.assertEqual(response.code, 200) + response = self.pdf_api.storage_exists(name) + self.assertEqual(response.exists, True) - def testGetIsExist(self): + def testObjectExists(self): file_name = '4pages.pdf' self.uploadFile(file_name) path = self.temp_folder + '/' + file_name - response = self.pdf_api.get_is_exist(path) - self.assertEqual(response.code, 200) + response = self.pdf_api.object_exists(path) + self.assertEqual(response.exists, True) def testGetDiscUsage(self): response = self.pdf_api.get_disc_usage() - self.assertEqual(response.code, 200) + self.assertGreater(response.total_size, 0) - def testGetListFileVersion(self): + def testGetFileVersions(self): file_name = '4pages.pdf' self.uploadFile(file_name) path = self.temp_folder + '/' + file_name - response = self.pdf_api.get_list_file_versions(path) + response = self.pdf_api.get_file_versions(path) + self.assertGreater(len(response.value), 0) + + # Bookmark Tests + def testGetDocumentBookmarks(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_document_bookmarks(file_name, **opts) + self.assertEqual(response.code, 200) + + def testGetBookmarks(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + bookmark_path = '1/1' + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_bookmarks(file_name, bookmark_path, **opts) + self.assertEqual(response.code, 200) + + def testGetBookmark(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + bookmark_path = '1/1' + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_bookmark(file_name, bookmark_path, **opts) + self.assertEqual(response.code, 200) + + def testDeleteDocumentBookmarks(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.delete_document_bookmarks(file_name, **opts) + self.assertEqual(response.code, 200) + + def testDeleteBookmark(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + bookmark_path = '1/1' + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.delete_bookmark(file_name, bookmark_path, **opts) + self.assertEqual(response.code, 200) + + def testPostBookmark(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + bookmark_path = '2' + + bookmark = asposepdfcloud.models.Bookmark() + bookmark .action = 'GoTo' + bookmark.bold = True + bookmark.italic = False + bookmark.title = 'New Bookmark XYZ' + bookmark.page_display = 'XYZ' + bookmark.page_display_bottom = 10 + bookmark.page_display_left = 10 + bookmark.page_display_right = 10 + bookmark.page_display_top = 10 + bookmark.page_display_zoom = 2 + bookmark.page_number = 2 + bookmark.color = asposepdfcloud.models.Color(a=0xFF, r=0, g=0xFF, b=0) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.post_bookmark(file_name, bookmark_path, [bookmark], **opts) + self.assertEqual(response.code, 200) + + def testPutBookmark(self): + file_name = 'PdfWithBookmarks.pdf' + self.uploadFile(file_name) + + bookmark_path = '2' + + bookmark = asposepdfcloud.models.Bookmark() + bookmark .action = 'GoTo' + bookmark.bold = True + bookmark.italic = False + bookmark.title = 'New Bookmark XYZ' + bookmark.page_display = 'XYZ' + bookmark.page_display_bottom = 10 + bookmark.page_display_left = 10 + bookmark.page_display_right = 10 + bookmark.page_display_top = 10 + bookmark.page_display_zoom = 2 + bookmark.page_number = 2 + bookmark.color = asposepdfcloud.models.Color(a=0xFF, r=0, g=0xFF, b=0) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.put_bookmark(file_name, bookmark_path, bookmark, **opts) + self.assertEqual(response.code, 200) + + # Import Export Tests + def testGetExportFieldsFromPdfToXmlInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_export_fields_from_pdf_to_xml_in_storage(file_name, **opts) + self.assertIsInstance(response, str) + + def testGetExportFieldsFromPdfToFdfInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_export_fields_from_pdf_to_fdf_in_storage(file_name, **opts) + self.assertIsInstance(response, str) + + def testGetExportFieldsFromPdfToXfdfInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_export_fields_from_pdf_to_xfdf_in_storage(file_name, **opts) + self.assertIsInstance(response, str) + + def testPutExportFieldsFromPdfToXmlInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + out_path = self.temp_folder + '/exportData.xml' + + opts = { + + "folder" : self.temp_folder + } + + response = self.pdf_api.put_export_fields_from_pdf_to_xml_in_storage(file_name, out_path, **opts) + self.assertEqual(response.code, 200) + + def testPutExportFieldsFromPdfToFdfInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + out_path = self.temp_folder + '/exportData.fdf' + + opts = { + + "folder" : self.temp_folder + } + + response = self.pdf_api.put_export_fields_from_pdf_to_fdf_in_storage(file_name, out_path, **opts) + self.assertEqual(response.code, 200) + + def testPutExportFieldsFromPdfToXfdfInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + out_path = self.temp_folder + '/exportData.xfdf' + + opts = { + + "folder" : self.temp_folder + } + + response = self.pdf_api.put_export_fields_from_pdf_to_xfdf_in_storage(file_name, out_path, **opts) + self.assertEqual(response.code, 200) + + def testGetImportFieldsFromFdfInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + data_file = 'FormData.fdf' + self.uploadFile(data_file) + + data_path = self.temp_folder + '/' + data_file + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_import_fields_from_fdf_in_storage(file_name, data_path, **opts) + self.assertIsInstance(response, str) + + def testGetImportFieldsFromXfdfInStorage(self): + file_name = 'FormDataXfdf_in.pdf' + self.uploadFile(file_name) + + data_file = 'FormDataXfdf_in.xfdf' + self.uploadFile(data_file) + + data_path = self.temp_folder + '/' + data_file + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_import_fields_from_xfdf_in_storage(file_name, data_path, **opts) + self.assertIsInstance(response, str) + + def testGetImportFieldsFromXmlInStorage(self): + file_name = 'FormDataXfa_in.pdf' + self.uploadFile(file_name) + + data_file = 'FormDataXfa_in.xml' + self.uploadFile(data_file) + + data_path = self.temp_folder + '/' + data_file + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.get_import_fields_from_xml_in_storage(file_name, data_path, **opts) + self.assertIsInstance(response, str) + + def testPutImportFieldsFromFdfInStorage(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + data_file = 'FormData.fdf' + self.uploadFile(data_file) + + data_path = self.temp_folder + '/' + data_file + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.put_import_fields_from_fdf_in_storage(file_name, data_path, **opts) + self.assertEqual(response.code, 200) + + def testPutImportFieldsFromXfdfInStorage(self): + file_name = 'FormDataXfdf_in.pdf' + self.uploadFile(file_name) + + data_file = 'FormDataXfdf_in.xfdf' + self.uploadFile(data_file) + + data_path = self.temp_folder + '/' + data_file + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.put_import_fields_from_xfdf_in_storage(file_name, data_path, **opts) + self.assertEqual(response.code, 200) + + def testPutImportFieldsFromXmlInStorage(self): + file_name = 'FormDataXfa_in.pdf' + self.uploadFile(file_name) + + data_file = 'FormDataXfa_in.xml' + self.uploadFile(data_file) + + data_path = self.temp_folder + '/' + data_file + + opts = { + "folder" : self.temp_folder + } + + response = self.pdf_api.put_import_fields_from_xml_in_storage(file_name, data_path, **opts) + self.assertEqual(response.code, 200) + + def testPostImportFieldsFromFdf(self): + file_name = 'FormData.pdf' + self.uploadFile(file_name) + + data_file = 'FormData.fdf' + + opts = { + "fdf_data": self.test_data_path + data_file, + "folder" : self.temp_folder + } + + response = self.pdf_api.post_import_fields_from_fdf(file_name, **opts) + self.assertEqual(response.code, 200) + + def testPostImportFieldsFromXfdf(self): + file_name = 'FormDataXfdf_in.pdf' + self.uploadFile(file_name) + + data_file = 'FormDataXfdf_in.xfdf' + + opts = { + "xfdf_data": self.test_data_path + data_file, + "folder" : self.temp_folder + } + + response = self.pdf_api.post_import_fields_from_xfdf(file_name, **opts) + self.assertEqual(response.code, 200) + + def testPosttImportFieldsFromXml(self): + file_name = 'FormDataXfa_in.pdf' + self.uploadFile(file_name) + + data_file = 'FormDataXfa_in.xml' + + opts = { + "xml_data": self.test_data_path + data_file, + "folder" : self.temp_folder + } + + response = self.pdf_api.post_import_fields_from_xml(file_name, **opts) self.assertEqual(response.code, 200) if __name__ == '__main__': diff --git a/test/setup.json b/test/setup.json index 675dcea..7484098 100644 --- a/test/setup.json +++ b/test/setup.json @@ -2,5 +2,5 @@ "app_key" : "", "app_sid" : "", "output_location": "./output/", - "product_uri": "https://billing.cloud.saltov.dynabic.com/v2.0" + "product_uri": "https://api-qa.aspose.cloud/v3.0" } \ No newline at end of file diff --git a/test_data/FormData.fdf b/test_data/FormData.fdf new file mode 100644 index 0000000000000000000000000000000000000000..dbf2680e34298f95ea0b1775f4aac6d87936137f GIT binary patch literal 1486 zcmZux-%ry}6zZ6ch8=`x)>imugA?f>%#i` z7q?$O{r$51C%zzRCb0~6p5Y8n7>1LPuEoW>!^eNoCTgK0A%-^4F09(xTS8*i;>yaPRX%0SnO?n@@(}%mWc!0j1AsjCh{21Kv!av| z6-gcqee@1~M7UE5Y?^72Y07Qsk?g1#)~q?S!l)A04Y(db;w|(GevEMoby0`$2EMY8 z60U&l6ZE5vj=8bqm*4Bv#5Nyyn?M*%;s6Q^J<6WjGM zvLoqC2=BZ9%OBd`M-8%fSSREDRZr6oQO-2l(1Et#ED%>rBVv} z1VJ;@@i?X`Nnyk+!7jDsAXiXK6AJ4xmGoW}UvEMka8^J;OfAg64R7H)+J@CG+JO5J z{BMEKld%2@`#^87>Ofo9Y7=z41E@*B{DK-> zx!q8;Ovg|!%K|Hg3z`myvjY^a%~czFHRr4pA+C+KgiELq>@87Hb)GDF)R%mps!Q~Y zrr9XjMLWIVK+l=9Dvf4G!j_llX*IL%u$goK9Jb*J{p-O5!jnQh(VADSc`y(89DrlR zCQt6FuFtu|adn;4v6U?57jwnM$%3v=RI4yxu&x*AGPZQRL@HHXFB&rz_B85LAc9R1 z|Guc`x}++LQYND$R}41e7RKR<65D{G9Q7PHV8n?=U`EbT>c!Z!o&|qoXy|59i$?wd D7&qIY literal 0 HcmV?d00001 diff --git a/test_data/FormData.pdf b/test_data/FormData.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5dec5729e609e3ae22c8e256dbc3445e9f42a0e3 GIT binary patch literal 443345 zcma&MbyQqk@GOeE1$TFMcXtUM+})kv?(Xh{K=9xYV9?+*xLa_S;PA+2zx&?0_pSTS zS!ecUhOXXS)zxQ)N>x&tiH(^DnQD7y3WSWn#>Yd-O6p{4i!3O}B5h;uZsE!zZExak zA!%XeWNz`k5%EzK;;b`SSCvZ7)G$>XU+pm1Os<{h@z~tioi+bDBCQ@5;aAQ zJyoPiwC(n69m1erNOt6rVa zIHkMqE^NZv_(McWK5g8PR9PD95JWn;31K-TQ(WR&d6a53ty?ylcP0zAta} zA|B@rgX=_I<&gTPc$gw9o-G|_C@Pxsj>u_PYYIucY2$?;b3Y>M%IR*R+ZzuaW@p-8P z9v^2Y^aB}jak@tgcb#IjXXGK2p(te`oszz@Z?^}R-qbavcJd5H<_do16YLy`J#n}4 z(_UT0>UON->H1lSTzkEC!f8;?gC8GzvXUQabn~=!xzc&;r?DE-cc7TJE5$}=u=@MS zYG>4Y_M9YP1Em&Qxo~fR=jHXfX{TCjhCrp(MP5KVz;B=P_UY%)d0GkW)YPOGi3rRC z_0KgYXfplir96KO3k*>_3??)bv=^2dYL^L`&(zVZzNHW4i-zU;Q_CIjTZMJJHGKEGH6l#{#SHH+( zsC=fnsr=EG9W#IE!gno92G})kUyn!1sehJ5Zxj<<9Z`qO4XyTL16 z7kO25f1Q0W+dt3$!IYAB<@SmZpo7LG;v|wqz47vJ9~eAaJ-oNdYwA9Wj*%26yu8p)Y5C6VY1|Q?W++BDL=7d z(q*sw#9A~9dX-0vk{(TRuU^A39fFA z((G&)Av+eV8MN{?#lG$D?^pF?sysTN@MhR@PhHsg3=JG1O`hhL5y+SPAaLK{L{kEF zQM%W+Vt8g&*3Er7A|=#4Ojc4WDVKq9rFHmp41>@;djGh2we}umn#%Hi82lZI*p2Wf zf-^3U1ekNw>*Q&~hUwcH>9d;=+vw=f&_ych3iJN?7S?td+PK`v{`+**#c$yuTq%@c z#-_%qfmz)eUD4pCmtAf81PIrn)xldnT=Al!jWW`^_27Ys_YS|hd_8e7iKC#7A&=19 zX@Cl0u}o!oActvRz^Fs=%`#48WwGgn2w=F6Joy0m9tE}#wa#N^0!LSW5HCeo%`Fdq z>66pV4(Kd&FjIkxH?eL`&Z~KozlSjKit9Kcb3tkKs8Kh;Ki(hv3H>wTO?Ok1T)^i} zn63b{3ugHp`>fyvdrHZ@PbV^=TXXam)Th%$ShURYEMsl#iopFNE|FAoBdp(Mh)ser8&KlfZGMnOdU-WqGL^%9s~ zTQN|S7Q#K5iG!^~(K2#bjg!7mrCD0O<7)+OU6sJ|G=aF_KT+?K-viyh_|9IDq1 zS8@zPXbS)fy+kk4&tE-GZLV3X64YYw`sE4IKN3h*r_ht5&C4n%O(=d`Q~r*FJ%JjU z2T=+(ne66k7wTC~^w3v-UyuC&+0CX9^RXPc3ZKtM(UY;lb5{o79O3TcS+YuiX65F-*IbLGC^P+?Ye@@$Kp^@ z&NHpU88*8q#s?%?ouBe3 zXKQ9iLR9))fuL&|*P>531s)_I8{Rlg$qyv{X?f+y(6cgAG0IWz-byrTCBN^tfA;Y2-qLsCBY~iBI<#(0JoQtXJ3m7Te zLExa>z4Lu9EC{tz!POJ7QnjE&={Qnp2oz}qlTx^Dhsm?{GZ`NPf=sv1I1nr2`GPv1 z5R4t7$?`E|_m9dKKX%WzL!GX|DgBn4419N6cuL%C{~K`ZtgQbR;JE*Dnp}Kb@96mc zPw2Yljhu2>(ZDY1T+h`lo}OWo=*uc}GX(8Zb39Y|PlG8PBP79~y*~B4*lSscx%^M}298bcB`fyXDHJ zN;kx8Cu^;4fAViNHm|MzHt8kjxT<(NfngbWtZs2*k}iV9y?5Dkys$PSTKZ}hN z{4R!HV`4YPd-k%+s|fSLj$I%8+?-tJkae)h`fH}okchhSqTV=7g?A(p z^?ECSq|AZD9OPei@hJPa4BN01+P?$%?4P7^DaJPhJ4Z^wHZG%o0WTmtlY7Vgkhnf% zGaOkuEOYbd%sm)+%_gjmbd?P7E8B>yZb3z*ehT|wcTXFxL^8L7;pqo;dp{CTXdRPi zY~}}ra-|0Fn+?wuoBsV_i{L&?sgTz8@#co-gNGmG_5Bw^61mEIS;8HP2hu|0ES1f> zQC>*}>P}S!pV6xi+a;F|#t>ihH?Q?0b5hvr8%t zKnK^_;q~>m)u1EAvu+WP(|gHgh@ZCpZ%UT!e+pL2%+*QS$<=|Bhy8u=Ba4!SyNS7p zy9p@|$6v2iO{^^3NdMmZYc`U2-?VqK5*9}OXWHQW=fh~_%q<+{`d_2m|BQ6rc_;qx#+Xv`Z`DUPEi?0)U+4=vsAQWM=p9vOO zB}kMQ1}y=P!)7}TA@^yDRF+;f(QQ1<2C%}+S58#+EFNUk#qaoYb_P*l|5&u+<+GsO z#g{7e1V+7=SZ#3W8<_evb{Bb{a5w!Ih9KCT*9tj`gq)7!)nbZ^=giH=-i~C9BN_v* zt3a>{;pm4zuFqRFgMlc5$I!Oe4I$7?Q##lI#$zkmkf-Hf2g*V&mvV@(Yw0+!whZ8` z)G9gO-Pyd!LiY6{_SIEBIscB9i7YIDYkp=7LTsJPZMvx0dHd}O-W$ykwAyXCzN+i? z%GPtn0=BEA^(we(T<2~Se9W@tyVVswHW@;JSnr6LsM4Ize%GvSBb*I(6YkUYHVGYT zIfZ}Ms-6h_xJephy%F9t`RT-w754JJ&Lz-$Yt^DDY^7Xxu>jn&yK?dquh;Q3Uv+Sg zHN*jj?`28(*vImEgkyp9Uq*h*tAk$6{x|T`U@h5Ic^d?Hq7MgGsg|GYUQ6#U8+H56 zu`(O)e<^rAU$4M=<(Gx9<7wXtia-usO(&F^gduDQ-=Ff)@BTJ7_6c)nSOc3V5_c+U z`;rti21dz~q2N+ST0_bp1|ij<`*i^09@KE5&6~W86^-vfZh_V+Q8=r`d(3MHIWP-P z(eGV*;e}C-BS4)h??Y>&047)d(HqqaXz5wL3AFesSq%!VGz#9?`XQPDaQ7w28xBcA zg})5ojoQRP4X8M%v+6iM;mo zhS1tw-i5!H%It_6&wmnbYqrz%W+s`JgT+Uomo<>NeM@vrsw95vYkAsyailvIzA%jn zf)6Y=zUxq7z1LjXHIv(!(KAC8sn=sYmfp zXnEnw8fXFGIKN0|G0$&aGHhzNP%~QWV;Mq(dXv|f4$El+2&>TKe^(pIh~p8ON41Jh z^jsxzRVg`ViC&Qid(0Jyg+_$JLsTgtz+iERc|6GBJ0a)uiRgJ~h+^K;53NiG zGY%IE?#VOIw7;=Kp2O$AbIaT78L9{;_f~2cnIuLt#;*urv}-S%3g3$&!3H|SZ6XO< zG`hCXcSnOXXvVD&<*GL#ySNs5)jP0E>OPY@^>0}=K1_^x+bazs@mpwUTbCUd9IQNXRp9SSfMA=>T zhQF8ELim&sLip*C9OTa1xQqqQUltW#yB0sCi70)WomM9c62+wyBgMp9qj&+eVfAQz zEDB0F0uwq=@9YJGDU)U;=L&|e!W)-m%KOw8q5;kDkpOt!hr(TkQcvL#0$GK4=#>Pk zT;}LZc1!w#-L*N?jM|m;I~3I>2;_G`fhPRU+;Ne_ z_z7*35=0+aaN%W0iJ&Et6C##p_gP`kWfQ|pWQY5m%XWB)P$`m#p(&D;gJ!CxHm#Lu z`fHkC~X zvVznhtV%X<-;SGQHCEULBf}OT-G0n#)TghKY228 zN1dc^bUN%%o!0=YDTz4@!}+O-mEe$E83&Lz8(9yvM=pe{EZ&g@vS4Mo1FnGeoeeSPviDWGoxovM*!UBrMAWv{!i*K~GBfLgyvw)k;31=tJX>cH=Wk`XcLx zxl;j8otgCGZusw^fkypQRjpgvd4{N&+7t%J3#8pdTIAi3hq=x)`mr}W&P2eCewO5Q=pXXk;9h{+sviKMdW1v# zHt@slymeR}@)x4ju$zE3=tIc7S7Jx0N783}8+1pB<(L}}>(Dvbh5l37g}(f%1!JLS z>RWpI%^R|NCZJ~<;-PdK!6CIW4*B_1hjl)9l*`uNLK0KR2Yy)b2g!I4Rhp`K+^{nBMq zE{}rt;*Z+ixQB=rk+ZQEW|wqUX^@%o;-fMB{W%6f2Rau4DZsedAf=mMwg9Kc;h(%U2}61J~C)i0A5 zfD|b82;Y^o4D%L*ll+JhRJP&Pfw-<91Wi;AX@jsX^L6y*Ec5VW5xOOpI3JZ6(UQJ=KMti z&@11D1fijV{SzR9VoJV1s-f|3nU1xzu32~@r^a5RK;EJQgaNuGV5D_@z#Yn1BznsW*2SU#Y?GnB2GbWVf?dsV zk`9dkU|ALhH?$4_$9YOOa~2PCN7;n0Cve+#2BX;SCJrWgpN#k`_i|^ZnUXBzw4mhF zpmZxG=ttS_CPp4>Yg7H{wc3%M*bHrYvI|jWPayy5RYhCV5>xo6sI|Ja#TfbX8deAs zbjPUv95Ic#P7!Qnd$~*6WI245#a8|JoO^y8A(X|cNs?+}bl`rYY&|nk!M7fRaMT%4 z(@oi5b%uBN9zNJ?ApOMj6n-^SY8AiVxRd?7N+nmc#Trs_fZ1IHI);`SVpB@Gi7^D% zRYNj}{PrFcpUhT3oc7vlWmn;cFSk~A-|+wLqB^3eLhw0Gd#YlUTyxp)$r)O|)nZpk z!pf(mEs`0W@8xzE2GdrA{dm)Nt0y}?|C4de(%oh+FM=3>%igpH?=>?i&q;d9Fm+3z z)~%_IGdrtyA-Aaq&upFt;7b1tmz)UiJHb=BMH6aRr;Zdd+3U{%qj-o{N9Q}ZIOox* zGAMsNL8!0Fh4jZS6^Q|gBMZ2e?Rv5$pz-YFx74V^_tHY~3?Ad&B&c$1O6;6D0FLt^3t=W?g+Ex{ z+Y^>3(-368|IuszKxUrPkg18$%ED!g~)2T#~uJdI@FXkrg4TA|HhX>0WS__ngD69w(j$pdc)5L-QQ+i{6%+iTqiI` zQU41Kg`#IFws6?U`kd%W;R4WzhRXGG)Wb zu3a}U45jY7r&)^Cf%lmt(7XFiP^6~DAMc?)Wb_N}1plBt5DyuqNtY&f5zUen?^_0Q z`|m29U(by1v~=%uyR?Gp(?s~6lfI>tem{MBR*ORSTy{^ais`(o`cX?oytin%WJ-*z ziHe*3TqLdEH@Q`X)GNW5{?7g!`RXKIr8DK(Zuq{mg8rv*-490Mlu|Q#qRAE<^6;Aq z36~DE6!#*O6DV=Pa!Az#-fug6O4x3nY7W{IP1Kw49i}H1Bb_X#t^xGR3tlJ;I^!^@ zQkAVb?$o6ps!Z7^>hLD0^|UuOgx6^KWG4Sm=1l(?Pwe6b`d=o8Li?gO+wh`bnb*)^ zB)*58qYiHAp3PAaqg$6c9n_cuLhX&uN9`s0!x{g|GPk20N6rpTH)RRb@W7(f2A(&C zsImnD&1r_1^loZECgF}iJ{a@fX?+J9j6S3u*q?}*p5cgaVCQdcNMNb80+43XkwVDTv=A5pgWqLVoUG_I@nLi<8F>vKBCSHDB$&VGGfO`%8$M+NZ zsut6T{YkVaV5Fas(osVfL>Gx6K7P<>xqjA)Z=R2(k&AWmeAt3vHkqWg@K2&a8J_

X^N9gepxN@k{;d*;DPQ!`2TK&J#o!fb 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

v4aNJSXSB>wt3!rk4%B%dg=7 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 z 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

XG_!QAh;?{(PQX$% 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

#;&dMZ43dHQ(nrm=6G@v^a=#=XtnE#B9?Z+N$P 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 F{|^cn3$6eF literal 0 HcmV?d00001 diff --git a/test_data/FormDataXfa_in.pdf b/test_data/FormDataXfa_in.pdf new file mode 100644 index 0000000000000000000000000000000000000000..743dbaa034eb49d384b9f1e9edd1b780187230df GIT binary patch literal 82703 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%0AhtV2eJ%vM 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ⅅ`bN+Hy%`G6)u+-gRLL5jQWS~%;z^Lw$*Ey4$yw)D5=;edMCEB~RL2*S2!neJ+tZZh! zL{itaKlu8~{CtDfqOlSbAzYNcS!+TqG51+H=7SqXXR-e@zA@Fjc5)6`*6pynx*?yJWhJ0_|bF_MG$rDkE%u*?cemPqT7 z)g7=}2;ywOW4n_Crr11^YuK+eYkVe3&?%wS{tfq^Oa8pve7>B8u`}pX2MUTVHqM`l z1nw?!yk#LXJf`z>oIC#@t|BMYfn3mw+Yx=R{$N#JMNX-uRs+`P?1KW#%dcPo+!r_! zuE2IeFC`x@y)yBRUai6r!s5lhKU_8wTn6jXE1(tz$yY3?Y#`PU@dtR zc|&!Sbs}<9g$pK0s7@qvbC{XLat%&H4Z?*PE6#uw#u4G!#L_q&>r7;Z@7cCZf<6VPotML8VM~ddzq0bPF z%iFs0QSDXjxjTKzjp!x&qSwTEH$4eZ0p$bHC# zrnn_BUYq{H5F3TD_RUkKQE(){3uCRGCl??_K|ALVBPv((H?W4dJ~ zwkIOa=jQE6-^*rR75JsZ9{g3Zp1VU+3KJ!=7n~-j?@j8#UO)w?(K0liE;(3Gq>nrl zrcf%w!t!_MWsqQA`tD4jPz|3I$&A_F9tkUbjI&vgCC>|tneB-xRUn7&(TD5hLh+g?kqSU=BXSQGi^Ui?Z z6%-__ zgZbekR|8gf*S(E*T~``J$V$*aID?hok~v^n7F;Bp@E`o?gPXy0!V9y&r?C7f6`C{X zN0;W2*t6ceERWP1{aU}Josg-Zg}}3@=?5m?KZO<8B>TNd@q3e~w=|dz+c+6bj0QY! zZZzL}@H!3Su;3bDj|FY!Kn-hsVbls?T*%X}%x)XJo*M?JejAc{i}JXsw&VjmjE`vt z+jbtf86dZhpXx`tg8R^b0s4dmWz`2xO3xkNvAsxks3CvSe5X$?XJYWtdDJ2h#=yjo_PAv}brhX@oHNRT)35-p;@E&``wQZbhv z>LcZSv&K}a_Mh3W=j)#S{rcD4^aK9pjE#(*x)kYO;KHC#EOe{UP80%mNCvxxTXOTt zx%h5zT;TqbehgZ^1TdkJIhekOUPxeJ&eYG~#N4S%)Rb{lIV){80iL`ctS0H2qCUJt zEhnj1_C6`>C$Vfd7M17cO=&n2p2A=BFX+A6r6da04)PGa56eJ9Qcs{7_#SW{kiz^? zIB0~=Cb0a^SCXibKo)1w!aaTpjV44BcJ`8ob>&kM4ia?2>~n%{I9F1W+{#Ru^i9oN z#Wh1+2ku{Jek)?44yBw^DDVD#`?dQWL)EDl)VSEYlX^Z?!^q&y z9>|WyXo24Bw{n7{L-BS6BcLZ}J$ghWV;}9z(~$zfM}?ubQ;t`ixp&dRBS*|Wa-9jf z5*d&l4EP236+M>e3cl2pGLw&$4tA~|FAGtp2_7dg{8Bt~V)#EaL5lG;{M!WhCyAo6 z#)4|*o8m-uA$KJ_GkBjIoyPGH-Enu0R4GbA1M_z=JAG6tC6@xbArS-pDa>UXU~V`I zE5Sj)czfbtfUwIo-Il_;-9UBI^_46gf7)G4*Qc;$V5cD)QwR9zXp8%%SE5L*X!w;V zLMt*^Dp?31GLV~iK#~D&V(`an>g+UX=cgsq8dCZt-%3BQ#WTJGNgYn=fjR-H0d{ht z@Y|-}lm0O1&faoGX~4Fe51FVyoD~i{;TERfEi@?88NSjLFm<<2Mpkg;DnpQ;{NRbB zsz^o9QQx@T%yCuPg=mg)BF)5o&04B9wVyBUm%b8FTG1)G_n%|)l^FI=(-c1I|*<#cn zDX28my@T3B;(S=zlN5yDj9LI1u{0=2IEC766ApR>FMT&^Tbx(OcB^rT zp(eL8ug+?+th@z8Oety`fwr$DAS&OnqKwP+&-J?UF}4bA({x641V8(v+a?Q6L%a3+ z5~M_p;xK4*MU7$j0UE{BN^KuxcY&r)3Z@CqNqTC4?~z@pYAkGI=%4!Qm76zv_^#p( zdESuFQ)ACV-rwZA+hNxZec@qFwMBfau|1)cfq6hR!y@kdbB{KsEGr#B|MW1wwd1k; z<+@fhcax9$_yH`>?~&4>NAUC!9WdlgP7!bf#>MopQj*RaCWX^GxAA$kK$mK4qy4jy z7F+4H!(=tsXh?x>;VhMXNnN7mr*Wmu8-oa8n3#tFsUnc*EVAD1r=V*znovzxa<+%{ zbzGzI@y^Soj2H){~&;mX&Sq8Jz8^%j@yq>PYWDgU_UX_AH#WoDy=2bAyqVfss z8G$`d@Mt~bBm0Oz3(lYwe@EeR6byF%fJG-2+eg|6u*(G7VF;E(5V9RbHtC91!e#bH znM2mH9&na}`~O-^7ZoE5o+V9xg#IZ<>l{5D&nT#kWJQbq3VScL*Fz{QK}Fh3n5HpG zmY`MqAxuP9Oho!-I>d|V8Z#AFn^S_?_-TU5$y3AmKKL!#qR$8=M$0~&%Qyn9g*nRc zmgdXFwF(`&X`ET-jP6TRL3=g+jFW%k6bHv}I`dxF^3WKB3O`GX+|0Hamo?)gRJ@7j z%^?mc9-k9*+>Gm+m}<>2)th5lL(uW#WSvmlz2Mew0UM2wJYkulB;8;W7TV;J+sQ4= z#JIkti7Ttn*S5)FF`Czb7K8_Zf-StNyTX`81MTcL?q3obm3AQp%d4wdUT1m%kJm#+ z&`sPo(G5dN@;7JmZFiZ8{}z7#$8Af{TWv^zMLRiK0qKHhr)6LLtc-c`#4OrNL$FH3 za{OxkrHoF%>MRgM`8wRx=mB=>kGtB1yQo&APzB=1u<#q0XQP3(c54qf9*;6BO}x+w zd*MXC1@ARw3G<;{2Hg_0C}|ZEAqQsfu1oocxEK$yx~?sui-E0R4^oH#KO_Ptbi~Ui zF3O)P^c3e;*IsU7fE%_)3$r=YC83~7+pAPV`yj;kCJG-tJ;rn6bSO@|5!$B-`WD)k z0dvrNaAm+5FNbeI0vxab8{~$&?;IpSJ7T%T61ozq30^vjSC4l*z#8m0`WD!C0t<4G zw;>zEC~&)R@<8t(T0sRivla~|NHSW2XhCLvdQL`OQAhrZTC8tHrI|OGPE=!@agt>I z%lqO^#>F!>_#me|78$TZzM|86F%9%|g>H0+^9iOohFD;8%$~Uo#x9EhE(H1u*!7y&gd*dkVN0=mo5T<<6t%uba0h-T$pPC%M>|*I8O! zb?5u555Fk8So3*Nrj>HmN%ld|vL#Cc!D{&W=ht#e6xR!@iW`}irS|JNYHiZpqiTr! z4jfvgy(8dn-13Bu>s>(Crd<6l`CH~GIOhW0>v!Efi^H;5-}J@pZ|=%}Me>}#?b>!W zDM&H8Tc*?J>%L}8|55q-Y>n~aJSFFM$~tgWJnoD4a9^F^9TuCWi@-DWeyljFdU1VP z_Eob+eia<-C!&EW8W0FHtR%$mm_7O$p z`Bg<193Pa|9B-!!k=hFCLc(I!%qeFI!V1ERVjWpRSCw)(xgqwxs@DG?1VcP8R_-WL zlnjwxC^DHq9uSE~MqHMXS^h{krHGQ=@P8GT; z>MJIUAY*s;F4l5Wy7_WuSt-2<50l;UkGH!nu7N+{|1w&@+46TQ)+TIFVd$1qn;kM> zRi&ItbWrWosZ}(kHiT;{YK;sz0VgTy7DVV0#>y}^`0!+{WI4T|Z zNZpF~xrT@_nS`NA*R542ABzlPHDhs|9!PrA@te}*^)QSCQe6C^-Y!>`7+ZE(;iP|b>L1P<%jlNyNYbG&*464SC4YM5^?)EYu4W|^70fkyn zwnDK^(8_|!CTzu}^cSO1ch(NnHx`ywDE6Qb8@Iz9Z71|w!nbdv{Ss=L8SuiAIem9K zr^NZS!5sdBGsg{bdUx!34yPRX!Dc>Ixea`=Mc=!30|tjKY8xL~GS^1zeIHtbJ+vR~ zq4CoBn*(3o!LFSa2($F#%)7A=!SeWA02AK2iFZ|+jTh<8o*ej#?DSKxYH7$g(3^g)H&fouVru9@KPj_wEUd={_)Y{YbR`u zGa8c=;4RKVI;rVMS@v=Ic8A7y?!5Q_jegJGBnDn`K3Fo}>TP^;c-kYw9{JXZW`)>Y zr;T@aNd{6RK8plf)OdQw;T)xJvwE-D9*K)$?S4q~hqQKZy9F+H1knFjI0(^F*h#o% zEL!412d^*6Nnnz`5oxP0r8d&w^#n%2xCa_bSRG?leRFg^9kOhPCX6ZmR+M-AeBmV; z94;@Mb&x^3uxgTqR?Ov5Z7}6_n$D@Sug3~GEER{@why9uc-2(oSUuqPG>}i9gB!Sb z3?T|RdV8QhZ)3c9xm1av;jO>aLp3mnwesKQf!@BFX>M30r-!>J6{I@`)^|fbZ9Lw$zHHrK$-sh`xHBnj+YVJ^YM^#)x;8Dzkm5K< z9LPJ6zrV1!A-}2el;e>j$8##NvVLbH+@VmaOWGYlhxi?BZu{wQ)9I2-V;O@f``!zu zDywOzZz!gh8vH=q)Eg8AXQs>fQP{Jy%Mu7vocdYV_p1bMh>z_%oKv7UbMpMLYP#lh zqPm1BUv)5OiEM)At4-mG_?WoVjo%jqIM;PK6lW>RB-0exke#C{;|E493cOjM$EzL-x0ooW(d9jU3Or#6@Kq@ucdDhxt4M zT8LDzkT-`qlp@_*Qp&^dzRt&Ywl*+EpS>rUAyaV~+`B$j+<+^7PJB4K$ds=z7u8;9 zq92`FyJzDU4IAFmPKa}1rDze6fIjpW1l<{k(ux$8lie&hQ50`LySS@Yd6<#}w_F5knxRYti5|x{B%j@ZeoXv42 z%sgkgEB0fR+K&}qYCl%x$g$!_)PC6MqM+CU&Mm@+T$8kRUr9wReZEAkGBGVg`>v>~ zO4=_ZY}PK^1(PI~k~{Hc$$kBcs)I7avzzV`s_OtAIOgGOy;k>xURF?DwN@d?_*NQZ{C+=Sk46d1AK!j^h=Vm2>;>DJ*&XJ&|FME1;}1sYF9P zeV9jFl~T;$48;@WZ3tEz3nB{I^OQB9yCjIkf~Ta!mvrqVa%DblV-HX&VB|dERQaWp z3iSoUx9fbu!h*MJ&qgbbrXJ1A)?{XU6&)J1D|Um<7AB*1d#wuoRtb~JX}b}Ne{RH5 z)MBw4OJekaaXrD~Op+%peEBPx=%<21-Lwboe@62UxOu?qU3xa1lwB_BQ=P(+TV;Y; zq+rD}r4&0bL*e?2HNZ**{V}~H1yqC+fMUu7N0z8tquly+bi^u+Ph`$XoTbB`3Etxs zwMua6Q#ik&GlxTSHoK6`lGNfiY^KX>O5vhafMMLvyH7FIL!j2r5{uTTtRb>K<9iry5=Ih&k@*&gEA z?%~<4j^f$MsBN{rKd9i-D)`VuTZ}VBF(q%)w4OIf?snk;}34}Q?cwWy!8B8|w)A$B>pP!!i3BgM@@el9hfg6GU49pdz zh4GS$G*&X4BwARTAiW3Uq(z#2e-U894WVaAOCHMv&j8{a%1-jWa2Qqn?oRssI7Y2o za4YjLLzAhW98Eitb==OqJdI>Onft=d=bZZ|owUw~&OOFp_*|Yw_c;BHIE~(rgD$Ee zerO09zYgNIp}Y~e+NxvFVnhtt9Je!!N!j;=DIeR9bKu<=5*D{3j9Go|En>Dch`g$X zc*SLCvMs}Z<1#eiGW_1Y3?DQQscgNCa+_ZPilnf!hl`|xJLVYC^A5wOr+W+h4%~F$ zw*L;Ys8&lJv+=pE)zUg|NEnzUq{Jjfe5uAfLPC5`rEJ!sYfAX%NgFiMg8ee_A=o~o zp+BU3omop8y<7I2E3Q@N?>@CFTWcL1C@ZnVXp>@r5w)1SP2(TFVM&6{*-lcXZNJ+% z!sL8xRT;12KKP+pwC7&<) zpNnlU1Ms=0VMWURomJuDwa zk{9e(K-(m$Ho?^LY|Hs3TutJWfmCGhP-KjHYh0W`JIgvjDe3>ZQ2)__oA9AlobU(h zxZzUZtJ$ChcW`_J8@2Fkct(Qa>VY%)mFm-ba&{fpT3r{&B)%{jPjC_+7*iu~pgqIK z1F}#rr#I?F7pB)b*eiH3f4gEKyxS8c>rUv)QfZ-{`3Kl_50SF)@k3wJ!0I7(0?&33 z9IjC~TzN^`u_W|p#G1g}bk0&xPVc*ukb(7n1b0J^F*_4ext|)j-9X%VCNqhuz|#1l zsDrK@OX%#xsf<3F$fil{n9(!_)1&guXaM6I_I1!pMl^{ua+^!WiHw#y%!LBb;)LeE zkELZCMcsXgZdbr{HH=9hv;rMsxqZb%hOd}qzJ!(ny)V#;`9S#Z>EyT8Nmt3KP`1mM$lsi6=pW-=xWZ@+Ho)bz?;W*>a7V9ne0`A#sVKUHPkv*lu}SO5=D~ECwhOhFGj@OrmQ=-^cFIl_=;SM&6!6STa#7SM z@dTW}MS%xWvNS?ioN#fmMblPO*_xnRtu*ZWB6y`{eOLkF6J2l3LBES08-EAYvZc%+x`_sXU0Yh-8Qf61=Wps21a zY}?Y9YlbR$zQlCb?G`mDCq~?&MkQA33@)RNm~vDW713gEK#(;78YL=39T&u~HzL{~ z`-tKO1T}0nxW$3!2o_>883h&fy!OG&ocp?MQ_0VMea=1ie&4;{cMfY(s@*J2%4Qf% zu*M};7LWzgRW*zp^Mhu0JQ;`U+ghkJY5I z>j2Cq2fMjnv~O~`UcI;(ihan}iFo*5^m>CE<(}(vNc>@jK`%CHYcbjKC>$%hAibM= zWh?xVFbOYqpY(=aNpGkR-_UQu`-IIHzJDBDAjGn_^9tV%KO3*=HBgdIBP`)<7c9~1 znsIq+yyz@UdKTCjW0y{v9-|!#HvfMV}(!I_8#Nea@c$N8nsHjU@b7@1B}|%5bl;OO3Tv3$-0q1saUH90)VnI2u)thJxfi7f z@9muQtZV~=SA52XupsgbWRA@^=k%jyKF1v4ta%O}7#Xh986r-V848MuBMX8w+>4>z zBj(cpamDi+CV`m3NXp z=tTS>=QORoL29RfjIb>-orHW(v{Vd%G5pL~R7(eyFlGh0Lahi~eHhWkl@D9ax*=E#qxmCo zkrY214qHsP_F?xaeov#~K0lOwk6@i&oEim}fmA-shSC*!_v-5Ym5q3yV|e=u*pkIs zFbZ1!#op5s=PJeFsViLOsAjFY`%?2LwdOwqDz0T5R&&H^hoYjC+fw7>!&Jc`xrf6w zn0aU$)^5>a?Z$CUdrpO1M zd{s^aT|&jkr;LRqbkOxaWDc%r4w<`OqwcN*sY1LQ}L1PWH>w^c0p1eqnb& zzc+c8a#u?7t{v*=jkx&)GcIQyLEygJM)f91ZxdV_(KHm7R56hSFTJ7E-+tk~;l zL|j^w${U^dq1B1AnGxf%UREC#&RaCD1k9WP-Z3vj#rlqN-jWs?BrWttEqohRkH1$V zRyGwhFcp;S233&7wOx?Gm1a2*^RhSJ!QPEOQB$3EQCa1GYNKaJh<_}MrP;Z8s@#l( z7P>zBjF^YL<+Cq$Rwy;xvkJ7eBbQsT#_DvW~tsT z9mfQGSBdfd>aP?I=2Z=q12Q8Vk{iuu_%(+rJz+SFS_cy-*#DbfH~|@k5d(I%xczeD z>oGixV1Fzeu$wkT%4r}{3PybglM$0YH_5@poXZ#1oH=swCCNIP#m=9Z5EJZ|^p%fh z%29sJL6#M{PUR7Gya36;_3tpwjjRjfYC6pweCGaxR?a(`NP@(2jg{r?e(ounJpoef zPE{vNBT?(6`ejC$Q5YqMKbTwjsapxW*GSFopzwO(cpPpbh)ZAFfip!Sr>y3kw-N`l z2Pm$dlR;~v9NslwgG8dbB*rc~Ju44;rHuHPAn6=Z zdS*jhgJTh1)pJPZNb|K1>0!!sY$9AuF2M;&_Vfvo$>t)nuQcSrB9k0G$9V`RykKgU z)mxb|%lINiTS-~1F}WZqU$Z39%G9>RM2RVJ_dF`LyHH7c#C9U4sr-vuuiEjtUNgNTQdTEM9VT&~N?x*@$w-YHDvGs-H{n^li) zd5EL-X~druDLYc*W0fb58hNr{$uZ zIJ|vj@7>Ni7(KA6eX?ecJKs{UZ1tkRb!)x0*4=D8VfsJeRT>mkc1CHs`#tE_+v~Rg z-S&G5h$wEL12Vz{si@$BEes080$BzDQ52L#a70{KWEmYn!61t`;6j742nsGR$RdIW zBMMTWAPhRC&OmaTTuAbg%KS*>N2>0x@77m!zH{q-=bRQ6n9QoF2k_EPbXEhsDNuwG zaU%dt9Y`5wGSaWD)2^#@HUUm>P&hVY>Ie%EqH4q}!{OXYCM_+ZJG3|Or3w5Byb@Z? znIck-^nFt9B<9T6UVy$iU`0+t&g`Lch;GwaxaI6@L{8n=va={txO@GHe~1mcM5EYf zmRJHFlDa{viQq}~^>}(JJzKpEdgXdQ>3!xgJWJjhUJ@^hSF4Ze$Ln9#uhDPRZ|9rx zUHF0g2!1+0hyQ@z&L85B3l0jB1to$J!CwS_6CMzbAriz0S%jQNW>GzKH=2MZqgn&p zfHq(Z>4t+MD^aZIwCJK}R5T%)!wfMyY#p`{bHm)RY%CY6!5(0b zu_stRHi*rL^~7I@J;hn#bK+a#yW(jHE@34O5*JC33UtzD%DE_4ISHvk& z6#0rGMTMeK@uQ+s(WjVHd?a{;5wV2$1K~mJCc=pQL?jVSoFNK{8ls)(B3=-$iBF_H zNs$a`N?MX%l1}7yGJxDeMw3U$!bE2{n(hqE=9= zDQ8MU`BLFj9FV+Y~pAmRu zkqAq17N#Oqhka}9R8TN~1zZD_Zx#aai-#3;SJ{jm2$Z?*vfk#MU$~b!yis`Y_LHM6 zs%*pV+!ViP;jkpmN#dsllQ?o zkPLFUp}J^Lg@VI6BjI9X33NN?73CM_$C;<-yV2E=_m=`U<3$Jvn>7}~+bA|;D>UOK zT&l)$tFvo>nJ7Cj&#w#aFvdnJyZO3zGdWcD?~62)ahNqn{tL;f|A7l8(Y$nFYsR(m zhJPFPA_kkY6~04yK!`AZj|ii#T`n#yjVX$Vh(2^6qTo;|3%1hN|5Mxldrdl}26aQo zKuTpu!SZ~&JolU!gLlZ$tMQ$OC*ym>V=fcKbbkhwTvnglssj4` z1-138_C|4Ci}I7x!_9e2CQ9gfO78slRQd35RmfGQJisGwwQ8H&sibe%x7(@A+~UkC z)#&5Bj+;DvRln00tmdS)Ce{qugWOB+?tXtks1vhM9bKad>{ ztq9(#+_-a>%{GtAB|!{!qEJ;|RNj#W#G;g>lL@N$`171pV}KBCIx5V^KC4@LL@ht5 zt$aD=+R>-k+PVhiqwpIpB@FS4dtvOwACyITSL&-vkDk29Txy8Rj>ry9H);0Opl-+a z1bHdHzJ1_n6mu`GFn*tM-+^dPN?Q1{z~?>#CU7s96k1`rtK-y>5YI$U6|`GA&4F7#{TbLa z-#r$8gT;;wiAr?&d|fRKgTY7O4_*r`kd@FTa`%z&*g%sMB(5U1Jo1hWurankfDe2F z1K_0a6Y?5ZV$`Is$Q98n<#^G&7rG!HI43P#c}63`+*QyL@}|IA;0M%z26kY@TT^Jk z62plQb>HBX!GxtB)8_S;16Sh<2ZPT0t023W(|Sh41~+m@JOK;EU`$f`51ksQN zTB#v~NPw*<(U5%SeoBW5&{O3dPuTVj?HJ%I0Y7BW?Ge+o-MS3QRU5XPO4`A~T6+}y zN<$YAgM3$9o>iv;o8MVN+cXxsEi#AO{>gNi1~rkUaomXA!L-#iW40aX-gMWlQ+S}x z%z^?c>#c}!a6lLcasjQP|kj zLlquBlzW^R;_CMw(C?$R21WZNGdU>co!Jjo^n$n_)CBsS!RHUaM)t%Fusyv~ zQ`2~re7yQ5y9-WBHn|Dy;tmy^!{t9;Eei==OD=f20r0_$xBXzso#57$6*T`RZ;(c` zU5OV4MoEG-%t~`aO&i&Dx$YXxf1WkIpI8yrbiKpgbmKJhQq>|BlA8m?>uG$?PrQD| z)Z1G1%zrjL@A`%>y-7G#CtTr4E%AT&VKPMt zfV0!sgSxAD3c-88nb`w4^PllY{002c#xYMqmYkH3P^zk`EwxmhO}50dcY=9@CRvxQ zWW2R&WkJEtew!m);a^CW32+J_R-OMqGL8wk+J1hUjt6@e{vZN&M1xNagI6s zolKbm;03jC6+DEzVKbF;%4RAz*<1{0aiU3aN`4n|X1_zB4=@66kb$_NzF(#(HAxyd zoBx`MbW3W*hX2mS3I1q-soGRW*-Mg=!h_OwGV<^Wls}^6wd|-5I>xZ`FxqUgRX32$ zlBOl1C{6lq8iylL(m#f(C)zkL*+vPJ5FdH&<8EB&tc_JE=oFPSGdjnaKMK~2UH#PE z#L}dyI^xC0n&~F4>nU& zBv`y?7-A4#^cBS6j3?_xZ?)G{m$H#0hrGF-aMb~4umMC7n*uJ3yuNPlzSHIZP13<+ zZ3YvUx;-J3!U<1y^!otGTLR`F7y(_N5V?&47a)Y}gJ5Gc0sBxfyp9+xHe)>nh|aB^ zjE8=0kT>NYY&I#FWM4#G)up~efxnIZ0{D-_ogrr!Ym6vAgi`I%<)$-Mup9w;6rcD( zrume%l)6|})04}(M6UJ{?-=V5M1}Eav56`=u}_Qj3l@y>?uA}nE0(EKQt3PaY$k%_ z_O|1OBgP|4`H6~CXQ_*}cu|;KB4%54#&C>XSy+I5l3;dkkXso7))xtE0im_p4>VF> z{%?-}enHcaU}L_&y!3=ut_>`h4HD3Ty9hjwhQRZHb98X;xmXu-YJpNtdiq2xiH$yT zlpUs91_1`G4*zygcc16*C$a_if&{T4QQN&%GQ#f={CF}IrHuYo&*0L`8;W!#|t3w{)w3e=f6xmvM}>Cw}>=LRGK;%oR*5;?%$R z<=3|_oLJf4Pk`AxxD+mW@5aXAB>BO-MWc|J)c-lG{=fPJu2y}kI)vP%S4g%{J7bCp zG|az3k@T|0jArV6M|%%8>o(lPRqoQ|Br!&A%MZx!|GwKlLcUwu>AK7>P9dQ!0f@Ec zvZaOUwafgLt==4!0dBR-J zXnK&n${p#x6gD26pEBm5=D=?pzD};0gyXX@4hwQdq|FOsCFGNhVoTJ-?G56|c-z zGiu-E8zKOrRg5+Vi?6?Ih^33w)Oc zMntG+{F(ao|ClZppr+C*jwi-@gZE6+E_ekKlWeuSbrlD;f=_gJ8Ch8iqOMW|d5X%z zkRXqMiUvg94+Rk=JR*ql5PX1(2%;cO7o-RX?yC5VZq?DP-Hv<0d|3M>+jg2elW*>w z%+1ZocYf#h|D=U{WpgC#P|#*6aW~-?;;Y5&B`pfr)ubv{>NQb^qGbD0b8`+Tj{#Av zKpp}@)Ir-KOG|buQ#LcYs@8pNG|TjU-;`ESZ9l@bxUO!)II@BB;TaIWUmS+wUgJ9gA)nv`JMY{Jk- zKo#IpXNx@Ch+ z8&^`hdyH4b`hv2;V~UIV^XF)TyAI;A5#jwOxXC2K6*J7PxCwsQjLAg_aZ=U(y;0Et zwIw?hFsGES&M(&g#HCg#t$`BdTzs7p|7Z!4sN`sX1it^_AWqLiKO6L0jl9==#cFos z_uVwGcuI-qM#6i{r8DhsW*@WEyU+ILVLJnQP!QRLn5ApQ3xbaR=~gq7PsUlv#4b$X z^N-|}l}Yb~;cPN@rBAq5H1&=?t$&M)EWl@vIz$QPWPZ}#9j|1wzBC$rNb;8vxWCuo z4LT!WTpupBk?^$i&FA83BO;#3s|=RBtI;GTsADVR;iOy%3xfaio%dOY%1%w&E87R9 z@hIRzHQP2&5N>b$QGQ0tl$VxQ7-UeHC5Jx{8{R9g#oHwN?&_7>c}jmaGAlO1PZk{0 zEax|1La$gNB_a45qQKS5Iq>uxoOFFc%NjE23f2cOXw-=bnpj%7E4tVQ)zgRB|PH1d5lc{u-%{7zTy|D}zO->>A)6n0 zIJj`<3F7Mj9q$CZ*=}Nyg;jR%7BS|p%yU~gV6Sw`q20D-(6=8y==Z$|?*)3DK$we+ zr~`08?n5-bun=mYhdY^}1mn6l-bPy(QgPrH61Zfgb)p1FH~r$gH~;6nuP#+pG{gSv z{aHFiO3>DDuRNQ;ZFOBQk)x$V%ScFR< z4MAQE6PqT!sUmlygS@=5N>+J1 zB{@1GZ4dCj8<1Z`r;dj`Lfk$iLId29-EF;c?XWVC)f`9y%MA1E0OCWZAU6O+rW-K} zhT+|DUL7B&RvY5$>Z__xTi~jctYz-9pfglt$(#Celv~*7?9>C6O@snWWpFE7Pv|nn z=8ZBWmxURRCKR8uc0*+LXXT#Ae5>Ll{HJ6ZGst$2s<>T4cNUKn|u}7l{ z{QafmtqCuQLAzINlg;)fZf;p4TNV@&sIf#cYvVf&tsjZh+S29^d4j$sAmX8bM7;D~ z@R?5VUT|3_7_z0Ro-T*$LJS-el>+fdL?4LpN%EDg@~Q7N4%9rM-nWj0i^Xj4xn46)wpH%9kA$cJ#b5NwC>6Apg*OQ#QJ zx{Jvsa+nFnEn*1tQ|;UV9bsCW-ECX_S9H8-*NIht8*~F}ZsMwbUn2l&K$XAR4S4s# zmkvL3F!`FO&97a5S?D|op#Q2^a(f#G_pb3h1sBFmvZtq9{OP{x!lfPK-9qaPMf856 zt_e?GPtuugwj9$LXwmCWDqq|v!o~Qp6hnZBa!1XtwSd!(_atApg$`i_I*BSMSxpoE z3t8w9R-#^12|XUq$9wy}2NnJJ$x*Pl+d(kdy(*euc)M}0`;$f!Y+RruwU229(9QAU z8jxOyYzXp?iHS&7G$t`{If;YaB?&TMUK(B53jB!q!MKzKoKcL+4s|KWzeqk0%vf># zz)e|IdFDY{TgGwS6E=x_#5k>cK-EPjpG*{Ip1YLQA%m`MEk25@9hA>;F_g#Y#EH4e zHlY(E8I!vPabOhJ<<}G+D*|HAbg@9ub`b_@jliJr_|})SJ_&I{(&@xF}&C z`IyWjTcu>~)44zvte`AcWO5L{omMqtD@EbCwa|)lxRR}9!O&MYSU)N~qdl!Xrhr1V zS{jj)8tx&Jbl%QaZf4<`&|nhX04t7n0h#%sBgNdCRjC)6PZypp1h#9K>l&lzdrlwj z3hRaT43(jOE=e>SaVka4W4SsZUZbI#!C4+a&tej-XY&(r`5<=Q&DGk1#bJ`OsYOY& zw&$N>-4iIeKu2UrIM58!P+QduLaTa-;4N+HN}yfzdX&E7(05?My(XZn&{I}GsNB`( z-dif*gP1*l^KJ>PF3$E)PXq)`UumE`0i|81McfqLZj;G8jLGN6aX-=@C+R@P%ODU4gx15d3hWE$I$dCW*=IPX*{8A7 z=4E(h;ID+@DTXxrIC@DvMJW6foTstOe2Hj^lo2?GvfO-DI8~Uoc#3eU;cMsh&W`_g zWmdI9H%s7VJ$wXVf;hpyd9M;^DBC?g@61@Py~dI(y<}&2X2vqK+Ahfwqqr)JF_;*m zS~g^EDYQCy_06@7u$HoVf0s_$*%zpe-WQk-zMiL|oYYS_?KfeHe{Bi%-7Z(q_njP_ljJ7ILrL9FC8W<~7&yknI) zsFIa&&n_mOp*c3P_3yuPz02GA$oh?k-3YH+>ge6WFzb~3;u`SGp-b%<=DN3__cc!~X2C}L(jzpN8^SsY_UQ|aJaet;)7Y+IFGySzj+pc`>f2if# z!cggTP|sC$uuj?bTP{j|OFBCH_cKQwUHfh*6s;K{V&q02Ob#@8ro9Tvf0bVs_X|6> z$G804rcgu=qk80uc$#7l^a%Cl@sb z#JNR{|J$OXJ~|u5!%oB>vZkS8%uA{IU{au=vddPpjTzy|8E-ATeJuvtEd7Jrygbc! z*6#_?NV(T()UZS9y;b`uZpQn}(z1%^6Qk!{XpT;%;nJDz8;#S3eO*$YNc1f?nG}@x zwzt^5#nUa~{!>->@pBK2g=Vgs@AuX1nxaSgnmNkX^2Ee}s z%*7=U_Yf14fFP^^&;vRPF@Tbmg>ku2HfCll8Yjv$8reJt*`O(n#RM|QiD=*;=ra}# zP=F+gR$xtl5ik(y33ZaR=Lgc*5#Nn7<8nB78r2lZ17*=5UC|UWKx$!8j3kf~<>f_r zECwxJ2Q)?T5-b8w5e_UN$Ro!(i-x#2#g>34E}{}f070ltcQ)SBIndoFt5e^#{7M13 z;H&^I6R*U#k`l<7l=-PpE1rwZ9PAj)$hfv;`TDa%nKfkVGM**Z=9EXDRaJIMbC#V( zS!JUz-RH&h(_pNfg*((nI-_#Wtwg_ZtS8A8O?Hcqz59{!V(5iKD`0Z2vly}Rn`N&7z z{xE(iODLz()u4PJuu0xHG6_36^e$GvP3+FF`BwkR4a6}LqP_;C;pf%oRI8fRo$mEl z`-u*wvn-)#vHJL_-zdS)mY@W1qCgTS<3s0g>Fh|@9{G<%Py|awX$hRP1CJd%TkV5bXqsDOQ1P!1z=d+4)iSK=tumWhz;io*`Ez%NaK}z$oB_T>R|0-KiNLrBX zpW+n)NPDqd1&}-n$xER{j5^S7l0$CB`}(kWwW~|?lD9W2D6P&<81%j+71=Oz$ECAUV#!JE zy&Y@y+caZe=M$PnUumm$G+cAC&siQI)I8efKRH10wWbY$F3y6d6#mUCGxr3a%+ zhpS}Y_PMnSKZFTO6<1wLzI9{XF**SM`Tyt`OTRdVBoIe_&=3mP&iRH7@;bK^nhS|Z z;E#M`jw|0%#ol(-MR2n&@*@j@#E}YTEd*g^kt$GG;5P;*gIEYcG%}umw;(Mx62zxn z!lwp(>mAeyDZ8?bPt*!7LeJD)TgndkMs`aY7W&_7K8EYZdda?V(l08uFmMtz)4KVDyUwHY`tG|+f1%pGHG0tB)b8JT!#Htm#p#On z9-q%O<#+atx60&=oSZR!yvj>WjjTVh&IJgtwMa9V*RgFzfuD73ck2dv2wB6GSHD=t z|BtH}B11y^2>j+f_W2=#wmZ*CY#6M!tQi#42vC3SOu)-9w2(t*-Q@1 z3W0eXI!xulB8G4fip0dkd`}T}6csk083J>HDRL#A#aH*s>CFAAGWFrZc3x>+kJX)Vx`Vf9yQe(q!;ec= zjgK79HU2Ob@|EASb{{m^E&F{Xuqpu0VM+x2JdCHzkTE%8;f(+{;j zo?m6hxO&*8qPjd!-oIhcM38Fmi6VKTvjT$Kriz#K*A06{S@m2ObM|s(kq2)NMC@@$ zm>0hQ5+Wy(`yYkuAj-kmH9&-$bYPM*lr-rGNvL2%H-ZIWq9JAVAE5^bb9R6X0mvmn zsGS7=ksUu;vM{zi=9@b$-sN5nfsU_c4fhw}vPf+eV(r>nWaf)SONGeWT` zW30{{11@D8y($AN5{qxnFIT6n3>;JN9eo3+L}SP`Lekxt-bdjh6jF6TL0U_2(V# zX1lhv&bz(+)VxYX{) zt1X@BEsc^UN@7F{y@!uGL$p{LE{{uyTbC#b1W1v{BSkAfX@okPk{!fC#*};CaNI%} z93@u0p;7hv2*mr2@ZM(UGFvUB-`+(WQuvqW4w=aj~9h$@+6BgZ8p6&UyaFTY8ez5P$q>22c5t4%9 zcB`_ynrl6ed-L;R4;6XTT77;_xWZ%lqMFO9^)|}W+P7|Q><>H|{iwC8={0+80ruL& z1;K0_*R}kD9Qc`xhnjw7LDM+1*s)l=)m}qCUV&bYGloJv;~gRz-s0Hke?x<#lr#jB zG@|H|GEu*>=$beD6u#B*9cv^~$-l9N+X|1AGn3SmX3Q96j!t@SGb*VMjhz-KB{78y zj!jg5BoKIcv_`Gc?pRoc^nPjD%X&pkWkU?HprK`>{R3xrtktN_B>G%-RmoBRnioL_ zPlydKF4*b6YG>ub4P_lanRq@S61r!n3*r z+O4%>b++ZSyve??Q%?oBZbM~X9Nd4c?nF!4!1MaH<4fI+nkt?Kepj9JIN9HJ;Lx*A zTyFf3ynvBc*xn@feI+}QciZbb@wSD#rLDQ~XM_V4sqEVF$};zJ=CM}$qA$*qF+OMY zF;7FY>Y{a_Se;qXfd@Kb1+fzvwe2{DFWr1Fv9CGaxN_O=%h}%3rOVHzHqVmfcsb-z-K8eg zDZbspa@SWz&XzOlf1c`f;HmsUvOatMd3K>eXeiHIK7C2!#Jb`Y^1~^+wmk?e`esMJ zmyT4npy%)r1-2PjD(%hTDX{{JhNY;X42fa_e`S8ya%Bxf(Be&gK<^|9)HF|`z({$r zG(0ka3!m$h=7By*d68<*kJhK}gfxM_Y4rhcxTwV|p(Gj+D(&G3AA?8@@9@NWL!Ujy z)xpKV!O7LZDFoPKL=?u7`jIu|lNWtzb7>W8>T!7S(<$#pps*tA``EacE|UoR+*IdM zS!m)#*14+v+wmWT-fw72PAj+>oNT?l_3HF;H=PVWvCo`kKW(gPsM@{%Mu%iUgd>$N zi@7vjhhHabCIY;u<|`fZkI&9J#@lnM(&l3;y~dyC3h$k)JsrKwW^-Q2R|a^?U_yaq zXz>z@!N0lK<{!?=fW*W=w9o~t7m?mRi-M48c&a=G*+j`Bqmf&TBvFR^5DCv9mgN#z zfX0rPWAN^{5px`ABSU0?c=JO(5+OUUfFKcaTkO9`gnR=07mH9pP{79`v|95tfySWm znlXuVkdbE0L%L{!W=tVHWULwUkv=lfjA>+mOwq*f_=I>=!r@5{D>yvE;du@(ad?%( zdJY?-BjqyG!eIx8f9J4=!(I;iID9pP7|Eelf;24>)928TLt_qw9Ev!!;&2*=zvGb6 z`1nH*`;XBN{`-JtH0l~qix|%nPV1~f=7J^eIXv!XhIm^NOS`b4S zdi{qvH*yi)h8bfv7=vxV;<02b9ovfKV7XWUb`)#H9^(i%!h`S-JPa?wf51EOF1#1- z!(S03p+)EuMud>CCftbtBACb}3W?)HDN#jK6ZJ$R(Ly{Vx{0U63u2JO$uZDyh{#Li zRkEIJBwNUbv9@G*lh>}r>l!D5k@~L9# z40Vg@q7+?MpAA zgXy*OdRjr3(p7XdeSyAAU#D-;cj#8SlkTD)(<*vEpf9i%xC?v)nTW*2Y(4JGs&E&! z6Q9MZ5QfiYUxIJ_*t=*i$Ze2DkS35jApPuJEC-|wq#dLKbbJ$o(Y-YKs`}jzj~b5Yu!GoG_8&0PMtU%N2qmW;_!5KFCmePo9;St~ zVP63I|DwH0f8)BU`1N};H+nF`au1l`=9~P15g^2!JboFul(E0E%pD6%$Y}T>E1d-z&F&BYJ=Ji z`X*=x=*Q@L4$pqIq3Qz|`(9oDXc4mZ=NvyFP3rzJ;jhLkZx zemDBh!vi-s--Vr?Q9GPxsR!dvVcd0|q8!HNp?{6g*B~MvjU^rG2byfTI8)6Z;LUq6;&Ws^;68=h@H2n z+0NHg6M7dy>So}P-O9!20*o%k=x1O-7c-VQPvW^%eF?LcIXlbb>6!gcCw5BrK9U+; zgfpDScQPVd`|b6N>{bC0Ur-e_UaEphnYC2a3vDqiR5f z$#VTB>uso@FI%Ly`ytD9}R3O6@o z5xz6ls1%K3oLe(yow8QlE5&OX@;+b*{jX0#X65plrV-;MDfyq{jib$nY}c(-y%p@A z0XMeiEUVA+!nuK&{S|P_nwL4|*=P+e49t8}HBk<`-=$MDNC*9a2<$fuyX8Q`(E14e z`|`ep-cfp=j?=jSx6%B1K2u5IA_Y%wQS*!kB4mMZ=~G(At{6G>>&Nk4BH_DN& zW27mtZ@sUD8f9f6Sz|OU_MK$k4UXqWt*_T-zPuF^fzKA84aG9BH-TFM(PCC(X2Nilb5mMgX7dQn z(<-N|@pBB%*@OKQU8i=SLPdK^N<7HxaK28z=Oem;|Cj0K^g>|fNWn_)JLaD^W!_z& zlzfvu>=8IAbzAS9@Zo$;sh1V3C-#d5uAb1jUR{fKt>YTH8Q}LPqqJA&0qWxX z!fRpKZbWkob`)=utkxr%W(iy9hZeIMa|)IvikY6xQvPT{xUiR6IlExJ*H+Sh`HXmL zgS8gW+uCb^6+lu)F45mPBjS0D&d^QxUpt;>)F!d!QaWB@5AWPY3$VSVbMTKyJWK>U zQi-p0TAxdRxpk|T(GSe54$cThZym5z4GnNUk?)7lU8P9InE=|hWKTz0*~8i1ao zUQV%VvWfb!e6wY&3z|^@jkzxXDPN7(sgwb{Mt#IpdDes~{gut0e+oYxJ&VFk8O4 z*4{CVv;t^Q?lByn3Qi1n6gS&pK8V8U0ryPA9G2o8A{o zLN_XvJ7oV4B^x9q9}Q}3=gZ=T&t&4f>-hi~#Fo@bjc9+vuwQhHOq3D>$3I zdY^edTCY>|AGJg|i{9g!wff>`e}L-TrWifd0P?*8`&2`Mw*w=0P{m!TtPOIKA;~RK*&*nQeeltJ1-L?6IOtU# zn$#BdB&{tY-EG`8lc>GFpk1(b6XZ!7w8WzaP}8r{NwzBeMtaVek+bG`T%xL$eg+J| znyvHkik5Gl%HNF`fklBuT*Nt7vyArl@{MmEW$ty65`8r#`n;Av{>qsXllU8uwXy|WKOzPQL&h>*F$jw3J23fN*)Bs?U(TqAfr z2NW_S$k@LnpoU(t_*-{PtsVMPVE;++hif)k@Q{V*IR?}?DtA5ayv82bTO;Zu?nF1_ zY}d4g8FyMb(6cWKQtp7S9;2hub6vCpW{{ND(z#+qFfAYJS^VzP|iDLd`QdV*l5XmktjkSkD_V4 z#sVmM8qKnH+>$y~5Wi(`c`2UapRRfG9+85*SVN4Tp%o9Lu@#UKmFuS0G?f0gmD_fDHcq% z*VhFy{%nmQ=(Z}08+?8`b{SXQD|yP zo{30fG+!h^E$YWfyUU=Nu*UpThTo~;VZ?b%d^}w=l*d+a!46^-gHl;@O(u$q>{<%D z%&Z~r_M5joB}Px^Od#)XLD#rD$_?tAVl6frOm0b^=LGL%Kp5> z@FY;WqJJsAr!A7Znlk^~oaW`sVd?1=kE^xnbLg3etdoGxFQv=yg$!(6s2$*Zx&XwT zW2_I^TanRnlm&Gn!V9pgIa@bpI>??yRg2OU%pIl&kS+`Pu0jL-{`^rMGaoK$TvjyH zZ@!0Bsg|U};F^WJ2O#@6vV$O0x+MF1NNWi5JdaNpv^#>{c=(OTkK-7hPkX)~J)QGS zWv8^M{w{tIROTG(r9#9~5VIOH`d?#aTr!^*cY+CmsKWX}roYYD0lw6Sdl%!|2lC{+ z{xNhoE___%PhO?{hcyrrBvcLy)flAfV^_mMzroVb*PJX04|=u_<0~-#;p%D;0DVL_gS2- z9XY;%@igCO*%OVPQxXvaxXC6(qfuD54)qf#58AmG^o?MyhD@(Qi)^>UkT6FVpm#aii;7Z~9UnY&{gTKXUB zW%^xJd4=)4_qoYU!c7Pl639F!BoJh_GKaCXYEkP{S^d&4+FETtwCZ1gv`7Jqb+y*6 zY8|>-E6%OjiX&A9t*%vFR09X2Z_q_=TV3>NImE`8!^S);f&wloP^N2gT zfp5nK~z?s00(v-fk>VRh{?*61TIGjS$pZ4KfyL;Rfbb$X`otuHrJMcJVXDp~;Z*+YB zFiR)W)!u)GIC;@M;l>f7*WuQoHQtk3`{JBIEDrGfiM}`=l$ucW#5v3JaQ=@!Hz+ ziqz2!_V;Y20uyM!2D(recUpV4^t8dlE*Zsn^?uI02g2;^@jdGHg#3q!Yftz1pm&|U z(@v<3bSDb>%#;16n6pjAgI(@@@A}XqQgd@hI-?hHVSTJm!?Jq&9(T^`GD-G zXP>H1zarRhEIm2p5{H6t26c7KqXI*vXAib~5PL)RI_cwKw+xuwPS-i=(@Y+B68tz1 zU8kPw*_z_$xmry$Q?uq!)M}J>ny@+xT@0s|Q}Wo;cFtBGXOjD}w>t4)qt|U`y5F5L z_4u9jr{4L>y*qoSOi8h>x8q$bpV3hw;^ zLsI0Q!>n84^FxSjoV*6D&ppMC&eQhz$_tit_h}v4FIxBL^pJ)$!A$qAl1J1Ff#-bOyBIk z%YUcsaRh${1#NmpJcsM%1-%0X38NjS5AO=daK?o^L3g2 zT&~l5^&PpG{5cQh-SrNg5+(HtEiDognZvwf}9 zNrN=Yc$pv*sl6$3seDbQNsC-7x5%w>Cl=i+tFh;4d0AeOzso=5Raqx*$=lepM{{(D zCNxinYQ7HBq%Osl75WQZsjKu4`lvppkL#2A7kx_C>T~+MzMwDaU-fUgPG8g4^$mSX z-_{TGkhbe#?ZSg%E3r~5vkI%UDyz0StG5OlZH?AsV{ELAvrBBeO|(fi*{0g1c9~7H z={Cb=+H9L+EjHg4+U0hIU1itWb#}eoObm9}ZrfvD*k0Rb`|W@ov{q}gL)LA_>^O0m z6U`$Jz z_Uzq2-uB3ivR7K=ezMjr4|?7n)qC^}c?`cd$~N6>k?ge$%ht-^yVl`(qc-5_7@dr- z<8+Emu&Fu~FE;56dp~N>IaoYTABYx23-lpu9PJi|`7Il}gT;oOH88wR>an{~n)qfc z7$W1yae^FAp$}gMk}z)u3~T`f__ss~@$CnkH17Z<_;@Aji>>67l_u=!q@(}DjB)<#1mDi%V(Oh}m^O8C@<^jXbQX((|WVk1p?nxZ> z-o|smlLWcCi&e|OFe>CNN%~$tiWWtS-m^d6V>yOZS;Q(tw1HK*#5laEp4blM zb2Z4t^BV5ef}upZj>y%6d{#6N-O-@JW1nQdF;sBKz;G(9nYm{iD3D7)l6Q`0?F2BA z>`dhIBru9voJ^!cu8L$TDE7)M@w}B%q0`98bWrY|H@N3xWgdvje4w%bG|EC?@N^MY ze;q{f4G@#dL9=`lG{N61h~1T-5f*=oZx_SkxLgA=QG#oU$G1VYTnB38dXNdnZ$!Iq z0z>3GAV+Qn36Fk*SIPv~bPL|!3dYL!VOA|Uxs7Q35H!o}pwTl_PlkR}m4# zj6BcU7vv@4|1$h7MA6m}?bqZ@;vBTC%o$xSn}N!E@&UVjDF5ayAAy*BET8h0Eg)OA z%I8F5n`|cnJ3xXu*vX!|WH$#E1sYM4Za#-P%k>J&)#bWen$g~sGL&jtC55`0n#2IXMD=(=J z>%&s%^*0=Ceq2USg-=L<{!#zTw@*@$h5EEUE2B{A7p2Opvq)dkSEU%eenU!vT1y%A z`cEm>cc|KY-K_r-MZrIiM*UDf64Q_MQ;BqoZjqR7)z7hNn{JaP-LBguLwD$Ip4_9v zK@Vt~#L@o4lBGwqQ?j*7yQM~tX^&)@pp7|bVmdT5KC_qr`2KZNl33?LR#Kscq-^9k!F_ zccEK_)^1%q*-Zy7i?SlLIm(ZQNpqBp$|N3@N41g})kO`G6Z*4MMYE&XlI?0&6tzSx zQsX*RAI+mjjSrenO_@C9YE|QERpDw?1^05`Yf!6dSF18tt7=!rV%Mx}*Q|tVR?Pc; z!gVUDn~h zwJGV^G{Uv1z_qE+wP~blQ;}=aNY|!O@?B8ws#M{sROzZz>Z(+NCf$xDL66E@k7`|y zs$7p!-LTsAsLb^!+x6&wyq9}yR`nUjfA90&%Xts)r8i0orMzvS7UveGOs)a~Lb-^I zF37}!fM{)@EyzU>6tD^ka_ksJhu6bVe$;mz+>&k(5a(Jf@?-b*m61-C?>wKCt~xX?G|$zjQ|Y|umn444;+F{3+`}vp z%;I4dlUbhCap06NPVsO`1gCg7r4LRC;gl#&iQ$w4PAR}C$i!ov{}91+D4IUG@pBa(8&U$iE$Lj*fS zu|vYX3ddavN91rs7Dwc8L@|yi!4Z9ML?Mm{;fNv}QGp`{YX`UDg&O*oJVvO-2!k;~ zH5Lfbvn1$Q!tDPH9ZHm)A7kfd*!c-|ev+M^V7I5(;eFZLX}XU*d%Kp(pJ#W~u)Av6 zT~+L;!R()E_RnDUPnb%cppu8_EVJyB1ob&gea^5$y7xnxx|*P_W}rMpmsw85OHlE` z5SgLMMPV@piy2rUh8Q$t zs3&2VNKj8Q)RUwpmb#04q%^tIt6mMWVInMGrLX3gAGki6Wv&o6L7fRxXEM~8geIF2 zTK^MGba72MSF4_kw2>ldl#LR{qiwY7Z)0qXYT8&E>jr7|87IQ7v1{Bw8*k&aeu7O9 z>l4*g_fuCrNuQc*lU=1vvFr5NsW#PB*fg7_%GqEIs!`Kzy3WtA8LrS~stYeu7d~6p zxxsGGw=`O#uCIwoXKu2awDPAmM{91jn{{Tc`t>rnPf!EH)W8gsCm=NiqXC`wT%90BU`xjYF*uwQ=f|54#E2^qU7Hl&7IQ1LZj=FB0YIAZ(6UFNgIUtoMWUI7W|RbRX8^u%3YR zDzUz>$0XT3L)Jm|P^>uwYYxMjL-6G=e0doZ)Id%K?a5?i9De}~&3XrSS&N=>tF`J)FSTWQXKmJ|->u!+b*~-Pp{KUomTS%3cDLTvN?WPl zZI!LkbynMIJ&QHAM%TZ`?$P?SwpKq~XZLFTdRwnE8*GD)@3Z?v)%|wAjyKvyJ=smR zNynRQv!2ca_JHoE(>is{2kk+9<3pyMV_R&C2-|8~^(_yZdMDdv+jP9$w(CA0wMTVk zhwaeuPTQqx?zY`Jv&Z)6eLrT8xhm_jE>~lFZLd7^xIHe;er}p`Y@h9u3!ktj^wTHp z7kc;mZNJVuWl!n&fF01Ad)l7X@j*MN>pWx6==hKw(($wQtQb0Mhjq>8>^WC$&)f52 z?ge{6@BT%5QQz{Cy{z@G*eg0dVn<}qSM61uIci6Be9VsPI1u z0=A;Cm4Ph}wi04%vyLxO6@#iIR7IewFI0J=>S1yJh^X?QDkiFS=y<2?)VJ&sRUTBO zp(+biIZ?G&Pe0(P2%ai>@Kh?E_UoqsNo9~!1xa~Gst`$sbQ~~L(SxCZFw_r*2E$NZ z480_dUlv1o80s&Ej_UZB9n-fQ7ejd%s)V5m7%GOLJPcL9PzelG!%!ZE%Eizb-P_wD zDGx~lASn+?10g97NggESA!#Tim8u_fswzj51uimiQbVIFTd=CF*-c#Bw(w5Z(%jV1 zq6!z$8u!gN>cgCTmK9rh8Ed4bxapd?=Ba)zbF1C`s*9IahQwt~3|7ltqujNc<8E@d z%5-gRjoYZ|d1<9-0xDF^uaWIWYc8Cr39d=BwyR^wtR=Oz@W;a&4rPF6N zRJyL&GpAR&vyHQ-RjQ(PUni{UUZfeXR$agtO_sAX1I`!o9d51L?6$Egqwh^=b{Z(w zf2hfItY**aH61@rBw`o#b;qG;vn)bTa z#kAW>)hE=c(-*O42^ zhsf>Z9&#UfptbF`mgr&fW%4+AiabmHlKd6BXNATNSAip5LB)<+a9w7_JG+9iR zuU^>J8m}UUke8Fg$*ak6Rc=(xU8EYm zLOnsJdV(&u-yL>G+(~!V{g?47jjHOp!uvbtK15Jv5D@Y59O5h@Dj*J^C;}=t#90Ob zjWNcksTvKMsBuVQwM|=_xD19gt5xdMI@C0=(bS5KSd%t2Lkmb(R(_;mHK`XXUGMd~ z_r0R2*p>IzIs5K=&$Rdc_HZuCALNEO{;Qw!Ap$j1fNG@te?;I zc{CfpQ&{ zp;(9Ycmj{$Nqh%uuof%u7#_zeJc!|7{w?-DJrOKxYn{&iBIFvHm^rJZxtg= zF7+5fOD3|Kw5|CHXDq=K+QFvzHm`GhJgJY*_w)JWH6vCS>$w{L_!|GXn)dH-MX_bK z@2`3Khg}(bm)!nNx$o0mUU=6qgtu7u}&>xO>1yuqC}xHf)I=@=!y`8A`Ib( z5RZ64_(4I#fC~ZW#L>dh9qirVPB3m#FM&=49LtKjA1#y0+V*SeZZhlTe>yZ@ZaH+S zd__x67K?qJw6f2a+w7-`GO9`MAd*i9c{43i*Z6cm#!?r7w3ZLYFZhw{)4{jKGqn|P zS06ZoRwBIUF2>ch2cR6r%dFH_@vgFywfR9gD(B=q`Bc7;e^ZkQv~VV|z7S=^_F8Pi zPM&ZtUc!DHKs8>+Pf?4LIE{078y9d1S5S}l@gY9L7x)Ud;ZcSP;#p!;f^w_A;-W{D z6H(bnSX~P*3G}5dB;qr*MmOs8dIU@Sd5; z47HHisYI6ZZo7i^UCkThM&j>j=BmxSb3Vg+;#S!v+j;BVK~(M{eo9rDTB0tiI^9qA z*8}uGJxCAML-bIctcPjF9>xHdQ|Z|I*!eo1-dM_iIKP29C=_1>1wFwzU6^yaTrkoR zWlQ)MM$=cEoJa3u#AM8*tjomEIXXw8b-vE0rhTi;v9lfbv}cGj1I`S^8KriV6{QOt zJt)bRLdRY%=WJc6h0qS;j6IH8cI3EMl2EP}&hG(^JYmiV!^yYdeksd1s+_(b$_UWr zNURuJ11WG6dOK%O&RCo8!BuVEL(2*yW`wf~7_s2stFuj2o~kDu>+BQew_2XxZe`A1 z-`aZ8#zWV?D!I8yAcmT1w z%+W_Mt4kl2!a77#ckbJRTIk7BC5c;lNpI=Hs^TH$ul_PX2Ff5A%uF^^l4Y2r$Z+Pg z5v({yNt&cHyN#yJ$I$BIDDx(2dxA`q9M+bTS))uL7V@QlIc=Iurwxi^hRl>%GMjbh z9GNTgWWFpQS{4y6#XSGd<(Qn1lgun{$wk(mzn40>B3GGb>gAfe&wBK_d>|jnALUQ- zXV#{l$Vc)qbI@OPZr=(VXAxGqwa!O9i8CKK3k~ihol<;kNM=r>_vhN-*xa$K( zz>58E+<1O&9W9-CDw9lg>}q2VV$zhS#MbvtsB;-*5|G1ZHCwDAl}AP39VC28@*0hs&Nc= zSfiw{>ZnsUD9bj=vPbXJHTtlwr7S1(Z}dfd#eflF6d8++y_983Vl`!nG-J&K({yA> zcVt;>K5cF>Uo?;0CrdbGiEEdooU#aIk>;>wv*qtC|8QjKZ>3oolx2c7&6;f$Tcy^c z)=}%Yb<#R*y=lE;)lrs)*5o$vdc94O#g^c0QZ?T5BAySv;ei|Zrh)A++fEPTg69oS zt!Edh{k+su>8bFPds00s?ZM4y|DD!2voWtRrLkw@DgMtio^CuVa&zR()P{A9B@Nda zHuJwmq=}VxLrKHzhSY{04Kbgb5=qK8`_ZNe_8JkrB4TYCbUo-&&~=eu#+IPZ*y@6Q z%l?dSr=TGWEcG2k6rxkDRIAi#wMjjvc9OH(UbdI*&%U1Yhiv=rov2Ad^iWcu1YZ&KQy{=Hrk$u<8=2)^>GS3QMiCw#DLHDOy{#WoccyI)LI(!4^aiWS)l*43i>*+qb6ch0%@?z8uIfA`SjKWNU2<2x6CE0W-MBADc^c9R+Dj@(1syq=7Hj;xBt{59u;}R9DCjsn_42 zkss4fP|~Y(j;_{U=}I*9XZpCV(I<4B&egRj>?3BG^W~08M`}9@)-1D9; z&;$CK9zwq#)YtVeD*nr$*A~eJeM^t(o7Ah_(x?kH(!c8oH2yJE{z?6t9@l^9*ZQ`p zzH142Uq7&P{g<_s4`jP7v5#!2{hR*bUj5KA;I{p~A8{kyDA^5Hz?B4ucF5f|CS?;BLX)-GjRax8T8@pm(zU zoSl2l{_)*)|D0K~n5N(A>guQ8YN@X7#t*Wh!E=gMzK;6VG|N*fJGWMDRncF~T%2s}$WuL7RkK&@yJ!2vI%mhYLA!X*DcL$~$MCGUV9#-( zu+6c?z1Yuv|G028+2mTM`H3x((+J`0Q*~oMoig_o*V)+Oj?h}&^JvD&3#P%)`tiLu z#){Qqeiafuum{1n!9A5~Eikg?PVG?48OQwMox=9)dEr=E8Cn$zhhRLpg~+^&e2#D9s{?5J0!pQNOjU;S zX|e&!f>G?q6M1xLt3Y)y^f{sg@EeMy&GJZIVhHG$tnpYaNv_{OipHe#B}%$!ubDlF{TJ z$K}A4J1prjK$n89mC#0Sc`ImV18b46{kq<4Cp-1kOq!!-p;r)DEPV6sm} zTo?^ajy5Zob{&-F!Hn|ex22JMNVv?Th$;cs(mdiAN|j74;OGvWzfQ1tm9Lx`DYN?K z>~by5*hR0_^6(}7lwX!5_bM8(DVJ2ZKz}@0xQ{I$_JsFy{PpYOW}=~6l8q-TPaeu} z9%$ok5SBj9z)FL}4S&BPGRItXc}xMI*IxpT5pno5>8m>wR(gfS;xOhNmW>erv?9xn zn3;l&sF5xW3MXFbdF$xEbZ~=F;8IZJp&a3MOCCmhF1_S=X{f=q+VTy@uR|O9xtr37 zj>5E5tyrg@6t)U=H_o$oyCkcRD|VqKuAX)99j0_i6hAg{sJuA7Ud@Z;{TLK&@?=UO zOK&eX&*Z+nJhP4ODwP99E-k3u_sT0LIeFxj2znGsqe<6xcW)o;%M7{?`%VO?Odmo{ zykF*0EQyixz;5&7_6Cf@35JAbO~g3(KNdP4!=iVjC1n2IF_o-2)Dok)3_IO~Me0~g zrr8|%jGl0ie?p~1SKglAF%4@TXDZN1Uy}donz%OsFWH#?3Bmi>BgtIQ8@Vc-$Ezoa z8V5%0*DX=XRbQwWCen4f91|oR^cM)0Mz+*lsql zdxYvz#(!BW-K7cn!aq1`<+A&Dnxg!mz0e);+IfIpVSoGL^>$ zT-Zx46ej*N3U%j#fR)+ng_5QxcLsnd{CyiQNTPjjNgX#Y$qjj`-vZ%v(ma;n#oOXQ z_x(+6+Nyn#JclW^&CspPNznNN(Vl4fU~wP>N_mH+JZB=!+_=cO)*d+~aW5;kEw>B5 z@UA4R;$CNB1#kaNDj{o^rfllFRDbcrfRNB~wmS#5zG}98L?i0%jq+jP(j@n#jo^!u zkUI_cJXQWgO+pKs5!+_YNJ|!-f%Q@kB8MBkOVhQoZjl>DfMo=49;4~Rdmz^(*u#IW z{3DmtAZIn9K!h_IUm8cs14sJ$tenlRFO_}wV)!|O5G48}Cuso(hRV<8%$#=fY(=>BjCOo(gJ(|Wml@%6@!`qoue<2+FDJ}=iFnMQly`$dQEbc9R)ziew z)3dgnT-`Nl_m5NUx_;LQQr7!~7CY)4XC>==D|gtD$>ZW8RXAUt<<#ZWGtbz)Uy?13 zsFtd~VXA&oW#eQ;r?ipTtN4bcdQS4C2I<^3oAP;=6Y|nq2P@MfIqWVcES@U_K1-^0 zXS;gp>gc--K$-PgPea+>@+ZQwUK{EJcRHw$2ET?QD`cGsvaYrd1=jE8}8yTTw8j>6N%~ zG4xGoA2!&PFMjYbh0q``#)w>)faMa&lw!Ar$*APG#=6LU!ZS=`hHhVtBB$B+MU^Iq z+F04nk!=7acir&_&h)Vqf^RICnkUb>TvWF-zdxz-*JiHqoJL~96b||l5>UX@Iul_L z_<$j_Vr_rq0R+mZu6X3lX8A3ouRt>6;d*jbPGkYsx%T_g7KMoMZE96ndIxp7mBy(S zB)kF{FqqJSu^Hua?DoUpr_D@yyQ9$p25+A$kqhnO7S=s~hfkVrVEQ#!i(G#y4)vf@ zV(mrK^ocT14W-xak?%6cCj!EcG3q20U2cu6v9EbT2d-U2nn5X+%NoPmm5I8h-m_iv z?L?5}r`%!w{&fW1&IycSQD41y3BH6!2Wmn2L>s|r2J(*+qeD#NAaEWDN@8w&l%FW5>jNZo9(mIEZR)VtYykeM zj09n9&$-u3A5zocJ)FPn5PWv9><}AQGrH%w`2Mw4dp==zQ5oA~Cf`Y**3e>W;%QZF zf$pbcZv~-qvKc(nk;$(sA<}j^7A^$Slj0#Ah|VjQoPq)Pg+1lDLW_M~t_R^Dcs#$g zMLuxv8%uroT><`k@^DIJe#G}0_HLLvIu{Y&&k59?pkRA|gp~mlECx1$7=vL^_6|@=AS*XO7Hne*HKSx> zPCHJ$4p$ci;Gdy0J_QK55*pq0?Q5ZJv}G;SP1d^Jgn4#OTA3B3SR~ zL~*%4W4q(lex~51I(!FxhI=U@O^=``-ikzJUrH31j{QNh)&|9xNt-8F+{^v*2<~Mp z8=Cl*4=NKtccjfMOn3X{k;w4orG`KJlOzOSLEj?^Uk4+7`R%j%Ar)68^LHx`oNKx=%wA-AYCPesO#jz^Et1&q2`K! zQ!f*dvE8JhgRL_NK$p^=PK2akTWqr4>b)gR3ocgjx6CGJ@`}e=Efq$i`_jq#&5mo) zsmBIudkqG*;#-QrVEY@y5_F2S?CL6--BkLoDO8fyz<=8BovPzH?NLa0!v#5 z7dR9$IwC$SMS0u9h#|naiN->u&njn{!=k-PO!V2vl4TyLVC4ihMcIV=*jPZ-H-P5% zhO4FE)24%}F`$~nSl9RytdQtem#_Jo=!$}^`9)_Cnb31C>^M&XIt5BE(?c@w1rur) zc6qXnh&N2xvz!|V9u$4GMT^Jcff;~l7yqCuEw z)ouS}+3CVoAZ>=gw3hMSvbh2Ypbw7kgQ%w`_vyQx_i^II{dnZH!=8Qa@N^FwdUo)Q zrs;xAr``9j%NGIs_mNfBn-S);_)(B>p$E(m6^E_7y?W3I=8l+ETT2bpJ@IqXO z+sV$a`%v1Jl>VU=-KR)^X{PEpL~MGBB~d1qN6c|;K*C>y?uC?S zKu8w+HZm)qgE;IRHmlw?=~WAY?r{5Cs~5cK{*+wru)H61NQUF=d;}O3W)!bJdha1R ze-N4;9!_WY(oo=0QlR(2*%FakbJ^3VkBDvq?!s$6*j~C`dxx-N3`gP5pS`3+FK>VP zO>h>@2Gw>}U<-#b1>VAMv;ASIs!x~b4vx{#4tze%36dGV8}?mmO7n2}2wz7n@CBoH zooDsM@1@f>3-tVB!QX$6f|<*Hc-a+ z0ZzSWM#>CjWpE*0gGnU9(mRZNx)!hB6(8QMaeoE+NtA+9e8) zGvkdr5!&&QE?VhZS3EJOGWBpCaz1ftt+jplxo07}eX7+pzATvBO9~Z>P-F;3@yUO# zyC<`qB@Q|bpQ!83>xP+Ra)UYlu$A6GiN)S}6=Z?eeE-4wC4QA_Rz+v|dvL@hm2iK} z%Ry3FT;JY3YI_Kyh^O8%8B0i4X>5nfc}YK8~Wxl)hGmAW#Mdkt}3;Ri??Vw`Dd}+D8&A?f35yxObarPUh zg1p}S+|in4V4rflH*4N;eusVd%&X$W52rcu>yFoaVJCx~7uEeKu)dURnf$<|ti$UV02~ebzAarR9~O(^ON( z?2r?6l}3t1{r)i-jn!)!PIjB_F=}#u{pB@j^xdm{9Y32NkjPiX@#pJ;!oDh zahq46h~q2;Lk}*QUU87sZk5mPTA%W!*u1+l7`?Sp#}_q|Q2QQ2b+HroT4gx9KPtHZ z{iMvPx=PwH{Tr!8vrpkwJ0^xN)vq(Iii0SBeDNNlfk=AM0~cCh#14O zpR`s#oS78B+cEa3uGKwG;~Jd&1T1+{nYe1_==^=Yb3E40?0Mry%fV>jA(im;9f3JS zboMsHhNN{8!jZR-0t+_SxHNakiQKR-u9K zynETt38Oi^EfRocj;XjDV~(X_-u6PZl2|f{$iGU~tF@Z$3u}mVo5uT$*C&sdBD4H6 zCK4w+KZZ7%5Vc`eQ0C=7h!h!$qgo}P8-cnQ8e4a17}&<-=xhe=$5YwTMo_U(XMZ%Z z!rBzGxZ4BNHHwLQqb6Y@0Mpkk|I5oB97wQk5TEE)&l5hU!cH^S63r6htzfoi-BBdl zzP!;X99tSl-MQ^sO`6P2v<8_PT|K2HkXNt$j8qU582h&hOEJ=^pgZqU6h0Y!5;gov z)xO0QG*0qt(5#l~Ll&XWi*$)Y{r5bfs=4t>NLnI0O#`0G;rAMTU$)GIgNDY;8=w2) z2TEwBEBm1{TyZ>(Ud&v5jcJ5|t}xKU1Y(7f6`6!meijbL4p*cmoAINjl9FVI@HVE> zko3AJ!a`N_OOhZ@e>lns?c4MUn>1a#@Ri!Zx$nkd=vaQLS3sfH6j7}i;?2v=;ETH4 zh{9y}@xwE=WuyYkuc}NC=7*??twcghCnh67)DgHj#KH22Lm@*hZl(wV`ULE{#R^ea8Bh6D7vW^wXYaw_yYYBW>Vd zt1E?7(nlv(FGF&QwP&p#t?~|O<`WW}f>pzpG6PtgG1wQL>Q0kgPaI1FZzj$?*t7vl zLQ%E+9P^{@A%*RStC)G8Gj;E?0R8P@T+QR=twd2N9P+;rPlFYVWbtwa71;e z0+F1;ya$cUE+DPIgMLPD4U-l#ON&S$RRlbVwhKc_{RK;yXFPoF)AWGVgLL^nLD#0zg zS~K*FoMl;A@~h6tL+7Mia(gsU@30?9ILWDNX6_>?ervi+;J%lB*&){G}gn_cj!AyLX?Wn-$}jH4Ao-lKHIS< zO&v^KlBaT7CtM@RwZNb#OdzDucZ$|Ii`N!GuU=7TtR{EsW4>ubw5--C=Zc67ad#%i z33*(|@i>>xa4v7WI#NtChOKukdMjTOkNVrO)y%d%sxq(_68GZehVV$^!CpU`Ot=1b z6nL@Xx9H>Fo9wvqq8P8L=Z+6bmWcKb_?^C5j`6Tq+@uBf>= zI^RAZznP%~h&R*CyZVQe1+jcDlYhLVdWt3XttjnmgdXw{}{8oz&|5K9>b@u>CrV z6}L778yka-VH05RUt2taKw&IjN&=*d6rURb1PkHdt>VYI3s5>AW+`~(vZKqa-bUjH zu3MKYuB+MMeM7}oX|$dXG$fBx(Dug(YgnkiRcXt9h& zy5YR&ee+hPV)&Ifac7jltbFA+w#jw)E$*aOt(FCK6O1O>X7grhMs<>*?@h|{veL9G zSqX&Tk>Ly*0m(lpFxx*XFef+9e=cyL>XO17D~`v3Uig`vl2I2TrLhkYc&w6bg!gHt zBX+Sns!70;8TrKHsROdaY+`ZQaq`)emXq5%w=C@f?MG5t(S0c)6iEdNs2Z?CC=x4F z5`A9Z!4W=Vj$LCFpjv$;p#k4V6R2v-`A8p}-s(aIrXzGvDtM(9loSCkg8TWvIZ`U( zhFenk3?xMx8N8ucH_R~gEaDa3{zsN~TtI!_)6ctv5JuK&^oyqg*~V`_$!^hTS7Ajx zG%5ALJJ8Q`=UzvS8#js4adBjeWUQS(#EUR5M6ey%FY?~+PY4iH3?>p5HYkS!AQdnF$c4TqFdtFWK z&VQbwRfU5a-XT)&o2G=Pr-eX_H@upnc|}|AwSihs?5phXL(6AR z6!GA8^=h%>9yyR}umuT?k9VHY#*^p(92??5sZ~1K)0$e65b+d`aF*N91Lu{N?1VWa znl^%G=Zig@Woi@6OTqUDegQ4r1F2wXpW`CTbW(LLmY69bVoTBOR6MNMF&4#5-w5jm zV^gFDZM^CU&_wP+U#%P+rGq<>80$f5J)$t z4m+_o5Cx>%F^Xd>KQfrs9ecRYPcp_8{!S?4)wvdIq+?6`;?Yku;cw=w{}5wDw5KPYv?>qLG7Esi}4qxR%W9y+47skX|L#?5u3_e@OwZ% zGf`o8pkfF%bivIsFXFObCHJA4bQdyKh6%f6x}6$bsCLSIIQ=hK4-;en&%F1=<$aO5

zVUf! zAu_VO8-|uOJXKB%gWGk(eh!5qtrA?fPfd1T8lCC8WA8Og6i^Vcc&a+(O#{_8yv=P* zUq&rcL7>CH`uy>T#8eCaGWsW@BVnZE-p!foPHWwR(MUrXJz=5pe2U67#MW@{KU1xk zne>qz%wtpD%MsA!&AME;r=<8ITF+i!^gUDFpRXxO@tWFLL}vIh;o#OB>$ENC`aSE_ zyB*Fg4gi{ZA$s1&6A~}<44Zd;tcT&)Ij2eW^nO05*5b$`==3CkGmpM{OSB&{b9s5H z9q#s8ZaV~pg$-&e>%z0H;prJi*lP{7@G}8Ev_2~;PS`N`rV0(A)IeD)Jpbt3QPWF0 zkS9AMV&aIZDeQa4{}#_)eOi*VCV6li&@orlQgj)^K@;NEqHb38d|V?D#k%yP3dxoa zx1YzFp9jUuXD%JDN`$0uh%O@9ws_QMZy_WND#h^)R3k`N%g5mT8Z>rmbYAbJ>deI1IObHKm5D0Lf zbvJ+>kHg0Zm8oALqw?p5b^3=?=_x`L#;HaPZhkSR}Z-o zci6y+om+TTJL(hnQRQM!tM49mcMk1BVEw-B5sUgyTD!l^pnu-las9V`KT2&>evXyE z{Xku8^5YAO9c%2w7uK&{(qlYQV@BfCrRA!lCJ)fz8Iu0wezTjsjWP5xXrI73I&BsK_7lQ9FHCqll9`*xc4ix0E_2cFup7y zje&|77oI{v8mRd*dpkeHCu{8$&})0k&zDt%_$bDrTxmG&oDF)Mnhud5j&p zO=J`4;D;<_z9-0fIF=vFDT=Uw(!`PTLKj3|$U$+z^Khm~TOa+zyDTX!9+}7%F{qWO z0F(i*0P-a=fIc+^gmMpr0P_B}y0Jwa6`6rV)JzCG*;GvOQBK9vS*AW)wjvP~BdWcR z(^1U&q3_}3t8Cx;@SE5%-SWjM4BM@*%Dx@K{+^5FY+S%@!X7m?6@Z5#J$M(vZm9hn zH-RcLtnv|(l;&rX?$Lmq6qgi`9r=gcu5yd&qGoAjr~1f7rrawPJQ!7%${afCo{4*S zL)$nw!gX_e=8F8~RHvx9ye~&)JTIOlDTkLeJzgY5CLoC3RossMd7z;`Nynq~R6DGR z;jCjhdI7;ZhgvQ2J(ww?7F$K7M2J;2Hw&|Am~GL9)Jp-c@Pkk;=kpUM*B*^(s>HU7 z^OgI8D}4%A5wjR+drt~`_#~-)E#IKi<^t5pr<2{)s1tE(Wuugp^pbrOBGNWZ+s&Uo ztbceA-x=tJ6gKU5<=PON*qacY z?bh9>eIwDXXC=yrE_x=Mek{$Xo^#Aef)}`YP|^G3P$guI@bMb<7PKa@(a^ce6Nw1U zta54UC))NmBg)UU4amm+pGVoUp=DSw8u_yU=?Rls)c-{=oN|!g} zqV$osOf%)%HR0NnPeVV)G7qEkh1d*IAKSesnq-)(YHTZ^H}NrS;2N1>Bv}nZty2{yi(vpMol`WIo@5vG4GP}r@obAFD#m6Dp90ZaWLKgC z+lM+J@`6S9`TOVZxZ$`BpPHc5b$2_I$FoSESKdIi2k!=(QoEoSp9f7=AqaZgrvCI< zIJlB1r6?l@n(Z}ddrKO~o2^xJnti%k`JiYEh2zA1+3EAUW&*ujWSch+VZM4iMpVO- z`WuTB_2Hu%<4$uMJIa%|4VqTF2w&EkZXYxfU+Qjl3^Sjv)C+SS(KmtL)AukT@A*MN zaGQ2f(uzub!f^zsX#oV3axNqUC=cI7;GeL6*Y!iQtIi>XHVNgv_bQLc*jUtj2l=jy zqQQjusTHLmZ>(!3XyUeq{}XTV+qy+Z z`+b34T};iMpy0?)k9D!n8#7mvxBUDSuLC4;#-_s*ap+DJM{%9vTl7@=$9mJk<<#dQ zA6`GDVE!KJ`TFh9QGgP6^i>SR&;0GdEGbb+i5uNDb1NKeNjv#ZUS6($_VRKA|Fc4p z^#RdZDKX$$7u2KpTX#Qw51RBB4Kd8TyfNJ5Yms4@vI#Tus{dl^|A}+Mqe8A}#SV66 zWoR6CYg{3}99HHh#!8E7m)SeGyAJi=66qnKO7B!oLn$JgWvG@yPJV= zNE_N`Rva-;@I7V2BsIBo>lkudkXf6rORn`tuS~;?<)wzQSzmG|@(NZ^CY(3BBxWTX z>^el2FU_P_H)7M|;>mM;nqpa(alA$`{veSkB>ea+;09^b3Bd#Um$|s9)p8CFPmdML zm7Tk2c$3%mcRhEUbIg!UuW>s2bjVq*s&Q4#u7~_8rmssed{b}sJpzXd@Hx<%R5Npd z0N99am`u3xXDIy5HuVz}csPDHQGtNmKfEn|>rnm7|8evk$y^&sLS8xpQ@rf{FGq#{Zn z-p3E+epI>dUI0bF;i#XVBWI1Ud84H{V$h`HOFWA}%LtDvck|L_>YH`r?4Knfck~2- zga#+HaRVE96KakJIEl&|Q$n66)Gs*IHs&WVIppV!dqKsYc1>0bXtZImS}N!jco|L8 z)>CTZyj&5nBho75JFR7D>AbYXjr8T&ueW%$kI82xHfpn2a7B$)an`;U4-rfgH8luh zt*uLLY245-38CK(kz=|}$)&(I|41Z2i|pHR`852ikXQ?a4ehND_Twq7I^mQJU)MQH zlT!tIEsc`$ElKdpuQLN2xjMwVbGr6JhV+(v-vprM6|(%e{pN}WTFRnArv zY-TR$Y7bU+l~*xxwKU=}rV~Q_%~j15My(bH~&bYKPmr>$1m)`f8)W)%K`hc|Fu+qq5O>pKi~(ahJwz5h#fz#hP=1N5)e0gL2Sw1*fw8iDQqJBI&4{eLYuthVLk{_~q; zZT+v(|B{4P3}WPH4Yq+wi3vJ7nj7INBS5|JtJbt|CqbR*qmnn5we?S=d?Gcwj#qY#??X zP8JSU5GNPUuL|}n)t^=UBlQm%ck*1KS}-v*PmGYgV6ur z`UfEWN%B9q{>0)Rg#HKDKLF`ZlKd=3mOhjd2#1E;`OQz|QRcUY)Y&lD9@{3p zbr2mK5fL5b{PS<9FuS8}GF6aL2g+48`___FkYXpk4xBblP$5m}BcTgClXG9XA%I3Q zVFm}wuFxV8tmj10=HPMm4PjBX!ezZ-Df(G~{$l(8b!&{GfxWc@Y}1S=#LCgy#(|Op zplA;^HaCJzG%0~>f`UKWO(P|y#V^6m!@ + + + Dou + Jon + 999]]> + + \ No newline at end of file diff --git a/test_data/FormDataXfdf_in.pdf b/test_data/FormDataXfdf_in.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0a879ae5b289b84bbd68e57420d2dcd01dafb531 GIT binary patch literal 74193 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 O(NJByD6397(E2~~p1^DX literal 0 HcmV?d00001 diff --git a/test_data/FormDataXfdf_in.xfdf b/test_data/FormDataXfdf_in.xfdf new file mode 100644 index 0000000..3ca2678 --- /dev/null +++ b/test_data/FormDataXfdf_in.xfdf @@ -0,0 +1,21 @@ + + + + + + Deutschland + + + Freie & Hansestadt Hamburg + + + Hamburger + + + dirk.pass@bs-card-service.com + + + Dirk Pass + + + diff --git a/test_data/sample.tex b/test_data/sample.tex new file mode 100644 index 0000000..637c532 --- /dev/null +++ b/test_data/sample.tex @@ -0,0 +1,105 @@ +\documentclass{article} +\usepackage{epsfig} +\renewcommand{\baselinestretch}{1} +\setlength{\textheight}{9in} +\setlength{\textwidth}{6.5in} +\setlength{\headheight}{0in} +\setlength{\headsep}{0in} +\setlength{\topmargin}{0in} +\setlength{\oddsidemargin}{0in} +\setlength{\evensidemargin}{0in} +\setlength{\parindent}{.3in} +\begin{document} + +\leftline{Pat Q.~Student} +\leftline{AME 20231} +\leftline{18 January 2013} + +\medskip +This is a sample file in the text formatter \LaTeX. +I require you to use it for the following reasons: + +\begin{itemize} + +\item{It produces the best output of text, figures, + and equations of any + program I've seen.} + +\item{It is machine-independent. It runs on Linux, Macintosh (see {\tt TeXShop}), and Windows (see {\tt MiKTeX}) machines. + You can e-mail {\tt ASCII} text versions of most relevant files.} + +\item{It is the tool of choice for many research + scientists and engineers. + Many journals accept + \LaTeX~ submissions, and many books + are written in \LaTeX.} + +\end{itemize} +\medskip +Some basic instructions are given next. +Put your text in here. You can be a little sloppy about +spacing. It adjusts the text to look good. +{\small You can make the text smaller.} +{\tiny You can make the text tiny.} + +Skip a line for a new paragraph. +You can use italics ({\em e.g.} {\em Thermodynamics is everywhere}) or {\bf bold}. +Greek letters are a snap: $\Psi$, $\psi$, +$\Phi$, $\phi$. Equations within text are easy--- +A well known Maxwell thermodynamic relation is +$\left.{\partial T \over \partial p}\right|_{s} = +\left.{\partial v \over \partial s}\right|_{p}$. +You can also set aside equations like so: +\begin{eqnarray} +du &=& Tds -p dv, \qquad \mbox{first law}\\ +ds &\ge& {dq \over T}.\qquad \qquad \mbox{second law} \label{ee} +\end{eqnarray} +Eq.~(\ref{ee}) is the second law. +References\footnote{Lamport, L., 1986, {\em \LaTeX: User's Guide \& Reference Manual}, + Addison-Wesley: Reading, Massachusetts.} +are available. +If you have an postscript file, say {\tt sample.figure.eps}, in the same local directory, +you can insert the file as a figure. Figure \ref{sample}, below, plots an isotherm for air modeled as an ideal gas. +\begin{figure}[ht] +\epsfxsize=2.5in +\centerline{\epsffile{sample.figure.eps}} +\caption{Sample figure plotting $T=300~K$ isotherm for air when modeled as an ideal gas.} +\label{sample} +\end{figure} + +\medskip +\leftline{\em Running \LaTeX} +\medskip + +You can create a \LaTeX~ file with any text editor ({\tt vi}, {\tt emacs}, {\tt gedit}, +etc.). +To get a document, you need to run the \LaTeX~ application +on the text file. The text file must have the suffix ``{\tt .tex}'' +On a Linux cluster machine, this is done via the command + +\medskip +{\tt latex file.tex} + +\medskip +\noindent +This generates three files: {\tt file.dvi}, {\tt file.aux}, +and {\tt file.log}. The most important is {\tt file.dvi}. + +\medskip +\noindent +The finished product can be previewed in the following way. +Execute the commands: + +\medskip + +{\tt dvipdf file.dvi}\hspace{1.9in}{\em Linux System} + +\medskip +\noindent +This command generates {\tt file.pdf}. +Alternatively, you can use {\tt TeXShop} on a Macintosh or {\tt MiKTeX} on a Windows-based machine. +The {\tt .tex} file must have a closing statement as +below. + + +\end{document}