ScannerVision Web Server

<back to all web services

GetTemplate

Requires Authentication
The following routes are available for this service:
GET/{Brand}/templates/{TemplateGuid}
GET/{Brand}/templates/{TemplateGuid}/{RetainMetadata}
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


class Brand(str, Enum):
    DESKTOP = 'Desktop'
    HP = 'Hp'
    KYOCERA = 'Kyocera'
    NEA_SCAN = 'NeaScan'
    SAMSUNG = 'Samsung'
    FUJI_XEROX = 'FujiXerox'
    TA = 'Ta'
    UTAX = 'Utax'
    EPSON = 'Epson'
    SCAN_FRONT400 = 'ScanFront400'
    SHARP = 'Sharp'
    RICOH = 'Ricoh'
    FUJI_FILM = 'FujiFilm'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DtoBase:
    brand: Optional[Brand] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RequestBase(DtoBase):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GetTemplate(RequestBase):
    template_guid: Optional[str] = None
    retain_metadata: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResponseBase(DtoBase):
    selected_ui_language: Optional[str] = None
    sv_session: Optional[str] = None
    title: Optional[str] = None
    page_tip: Optional[str] = None
    new_browser: bool = False
    scan_front400_t_a: bool = False
    scan_front400_u_t_a_x: bool = False


class ITemplateModificationInfo:
    guid: Optional[str] = None
    template_modification_date_time: datetime.datetime = datetime.datetime(1, 1, 1)
    icon_modification_date_time: datetime.datetime = datetime.datetime(1, 1, 1)


class IClientQuestion(ITemplateQuestion):
    question_guid: Optional[str] = None
    value_displayed: Optional[str] = None
    value_returned: Optional[str] = None
    answered: bool = False
    regex_matches: bool = False
    regex_hint: Optional[str] = None


class TemplateType(str, Enum):
    WORKFLOW = 'Workflow'
    FREE_FORM = 'FreeForm'


class TemplateScheduleType(str, Enum):
    INTERVAL = 'Interval'
    FIXED = 'Fixed'


class ITemplateSchedule(IInterface):
    time: Optional[datetime.timedelta] = None
    end_time: Optional[datetime.timedelta] = None
    no_end_time: Optional[bool] = None
    type: Optional[TemplateScheduleType] = None


class ICredentials(IInterface):
    username: Optional[str] = None
    password: Optional[str] = None


class IRejection:
    reject_after: Optional[int] = None
    rejection_path: Optional[str] = None
    share_credentials: Optional[ICredentials] = None


class IBadDocumentRejection(IStatus):
    rejection_path: Optional[str] = None
    share_credentials: Optional[ICredentials] = None


class PdfLoadResolution(str, Enum):
    DEFAULT = 'Default'
    DPI100 = 'Dpi100'
    DPI150 = 'Dpi150'
    DPI200 = 'Dpi200'
    DPI300 = 'Dpi300'
    DPI400 = 'Dpi400'
    DPI500 = 'Dpi500'
    DPI600 = 'Dpi600'


class IGeneral(IInterface):
    name: Optional[str] = None
    description: Optional[str] = None
    icon: Optional[str] = None
    schedule: Optional[ITemplateSchedule] = None
    rejection: Optional[IRejection] = None
    bad_document_rejection: Optional[IBadDocumentRejection] = None
    pdf_load_resolution: Optional[PdfLoadResolution] = None


class ICaptureSource(IStatus):
    pass


class ICapture(IInterface):
    capture_sources: Optional[ReadOnlyCollection[ICaptureSource]] = None


class IStringMetadata(IMetadata):
    is_secure: Optional[bool] = None
    sample_value: Optional[str] = None
    value: Optional[str] = None


class IXmlMetadataImportTagMapping(IInterface):
    x_path_expression: Optional[str] = None
    metadata: Optional[IStringMetadata] = None


class IXmlMetadataImportNamespaceMapping(IInterface):
    prefix: Optional[str] = None
    name: Optional[str] = None


class IXmlMetadataImport(IStatus):
    sample_document_name: Optional[str] = None
    tag_mappings: Optional[ReadOnlyCollection[IXmlMetadataImportTagMapping]] = None
    namespace_mappings: Optional[ReadOnlyCollection[IXmlMetadataImportNamespaceMapping]] = None


class NotificationType(str, Enum):
    FAILURE_ONLY = 'FailureOnly'
    SUCCESS_ONLY = 'SuccessOnly'
    ALWAYS = 'Always'


class INotification(IStatus):
    description: Optional[str] = None
    to: Optional[str] = None
    subject: Optional[str] = None
    body: Optional[str] = None
    cc: Optional[str] = None
    bcc: Optional[str] = None
    notification_type: Optional[NotificationType] = None


class INotifications(IStatus):
    notifications: Optional[ReadOnlyCollection[INotification]] = None


class IValidationError:
    property: Optional[str] = None
    error_message: Optional[str] = None


class IValidationErrors:
    errors: Optional[ReadOnlyCollection[IValidationError]] = None


class IValidator:
    validation_errors: Optional[IValidationErrors] = None
    is_valid: bool = False


class ITemplate(IStatus):
    template_version: Optional[str] = None
    scanner_vision_version: Optional[str] = None
    guid: Optional[str] = None
    begin_script: Optional[str] = None
    end_script: Optional[str] = None
    template_type: Optional[TemplateType] = None
    general: Optional[IGeneral] = None
    capture: Optional[ICapture] = None
    xml_metadata_import: Optional[IXmlMetadataImport] = None
    notifications: Optional[INotifications] = None
    validator: Optional[IValidator] = None


class IClientTemplate:
    description: Optional[str] = None
    icon: Optional[bytes] = None
    modification_info: Optional[ITemplateModificationInfo] = None
    name: Optional[str] = None
    questions: Optional[List[IClientQuestion]] = None
    template: Optional[ITemplate] = None
    template_guid: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ScanResponseBase(ResponseBase):
    template: Optional[IClientTemplate] = None
    global_questions: Optional[List[IClientQuestion]] = None
    can_enable_scan_button: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GetTemplateResponse(ScanResponseBase):
    server_address: Optional[str] = None
    server_port: int = 0

Python GetTemplate DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /{Brand}/templates/{TemplateGuid} HTTP/1.1 
Host: buildmax.org 
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{Unable to show example output for type 'GetTemplateResponse' using the custom 'csv' filter}No parameterless constructor defined for this object.