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
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DeviceTypeModel:
# @ApiMember(DataType="Guid", Description="Guid representing the saved Device Type", Name="DeviceTypeId", ParameterType="query")
device_type_id: Optional[str] = None
"""
Guid representing the saved Device Type
"""
# @ApiMember(DataType="Guid", Description="Guid representing the saved Device Class", Name="DeviceClassId", ParameterType="query")
device_class_id: Optional[str] = None
"""
Guid representing the saved Device Class
"""
# @ApiMember(DataType="string", Description="The Device Class Name", Name="DeviceClassName", ParameterType="query")
device_class_name: Optional[str] = None
"""
The Device Class Name
"""
# @ApiMember(DataType="string", Description="The Device Brand.", Name="Brand", ParameterType="query")
brand: Optional[str] = None
"""
The Device Brand.
"""
# @ApiMember(DataType="string", Description="The Device Model Name.", IsRequired=true, Name="ModelName", ParameterType="query")
model_name: Optional[str] = None
"""
The Device Model Name.
"""
# @ApiMember(DataType="string", Description="The Device Form, e.g Phone | Tablet.", Name="FormFactor", ParameterType="query")
form_factor: Optional[str] = None
"""
The Device Form, e.g Phone | Tablet.
"""
# @ApiMember(DataType="string", Description="The Device Dimensions (Height x Width x Depth).", Name="Dimensions", ParameterType="query")
dimensions: Optional[str] = None
"""
The Device Dimensions (Height x Width x Depth).
"""
# @ApiMember(DataType="int", Description="The Device display resolution width in pixels.", Name="DisplayResolutionWidthPixels", ParameterType="query")
display_resolution_width_pixels: Optional[int] = None
"""
The Device display resolution width in pixels.
"""
# @ApiMember(DataType="int", Description="The Device display resolution height in pixels.", Name="DisplayResolutionHeightPixels", ParameterType="query")
display_resolution_height_pixels: Optional[int] = None
"""
The Device display resolution height in pixels.
"""
# @ApiMember(DataType="decimal", Description="The Device display width size in inches.", Name="DisplaySizeWidthInches", ParameterType="query")
display_size_width_inches: Optional[Decimal] = None
"""
The Device display width size in inches.
"""
# @ApiMember(DataType="decimal", Description="The Device display height size in inches.", Name="DisplaySizeHeightInches", ParameterType="query")
display_size_height_inches: Optional[Decimal] = None
"""
The Device display height size in inches.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DeviceHistoryModel:
# @ApiMember(DataType="Guid", Description="Guid representing the current Device History", Name="DeviceHistoryId", ParameterType="query")
device_history_id: Optional[str] = None
"""
Guid representing the current Device History
"""
# @ApiMember(DataType="Guid", Description="Guid representing the current Device History Device Configuration record.", Name="PrimaryDeviceHistoryDeviceConfigurationId", ParameterType="query")
primary_device_history_device_configuration_id: Optional[str] = None
"""
Guid representing the current Device History Device Configuration record.
"""
# @ApiMember(DataType="string", Description="The Device name.", Name="DeviceName", ParameterType="query")
device_name: Optional[str] = None
"""
The Device name.
"""
# @ApiMember(DataType="string", Description="The Device operating system.", Name="OperatingSystem", ParameterType="query")
operating_system: Optional[str] = None
"""
The Device operating system.
"""
# @ApiMember(DataType="string", Description="The Device operating system version.", Name="OperatingSystemVersion", ParameterType="query")
operating_system_version: Optional[str] = None
"""
The Device operating system version.
"""
# @ApiMember(DataType="string", Description="The Device IP Address.", Name="IpAddress", ParameterType="query")
ip_address: Optional[str] = None
"""
The Device IP Address.
"""
# @ApiMember(DataType="string", Description="Any Notes about the device.", Name="Notes", ParameterType="query")
notes: Optional[str] = None
"""
Any Notes about the device.
"""
# @ApiMember(DataType="string", Description="Total memory size available (in bytes).", Name="TotalMemorySize", ParameterType="query")
total_memory_size: Optional[int] = None
"""
Total memory size available (in bytes).
"""
# @ApiMember(DataType="string", Description="The Network provider name.", Name="CellularProviderName", ParameterType="query")
cellular_provider_name: Optional[str] = None
"""
The Network provider name.
"""
# @ApiMember(DataType="string", Description="The Mobile Country Code the device is currently located in.", Name="MobileCountryCode", ParameterType="query")
mobile_country_code: Optional[str] = None
"""
The Mobile Country Code the device is currently located in.
"""
# @ApiMember(DataType="string", Description="The Mobile Network Code the device is currently using.", Name="MobileNetworkCode", ParameterType="query")
mobile_network_code: Optional[str] = None
"""
The Mobile Network Code the device is currently using.
"""
# @ApiMember(DataType="string", Description="The Language Code Identifier that represents the language used on the device.", Name="LanguageCodeIdentifier", ParameterType="query")
language_code_identifier: Optional[str] = None
"""
The Language Code Identifier that represents the language used on the device.
"""
# @ApiMember(DataType="double", Description="The latitude the device was last located at.", Name="Latitude", ParameterType="query")
latitude: float = 0.0
"""
The latitude the device was last located at.
"""
# @ApiMember(DataType="double", Description="The longitude the device was last located at.", Name="Longitude", ParameterType="query")
longitude: float = 0.0
"""
The longitude the device was last located at.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DeviceModel:
# @ApiMember(DataType="Guid", Description="Guid representing the saved Device", Name="DeviceId", ParameterType="query")
device_id: Optional[str] = None
"""
Guid representing the saved Device
"""
# @ApiMember(DataType="DeviceTypeModel", Description="Details of the Type of Device", Name="DeviceType", ParameterType="query")
device_type: Optional[DeviceTypeModel] = None
"""
Details of the Type of Device
"""
# @ApiMember(DataType="DeviceHistoryModel", Description="Current saved settings of the Device", Name="CurrentHistory", ParameterType="query")
current_history: Optional[DeviceHistoryModel] = None
"""
Current saved settings of the Device
"""
# @ApiMember(DataType="string", Description="The Device Model Name.", IsRequired=true, Name="ModelName", ParameterType="query")
model_name: Optional[str] = None
"""
The Device Model Name.
"""
# @ApiMember(DataType="string", Description="The Device model number.", Name="ModelNumber", ParameterType="query")
model_number: Optional[str] = None
"""
The Device model number.
"""
# @ApiMember(DataType="string", Description="The Device serial number.", Name="SerialNumber", ParameterType="query")
serial_number: Optional[str] = None
"""
The Device serial number.
"""
# @ApiMember(DataType="string", Description="The Device manufacturers number.", Name="ManufacturerDeviceNumber", ParameterType="query")
manufacturer_device_number: Optional[str] = None
"""
The Device manufacturers number.
"""
# @ApiMember(DataType="string", Description="The Device MAC Address.", Name="MacAddress", ParameterType="query")
mac_address: Optional[str] = None
"""
The Device MAC Address.
"""
# @ApiMember(DataType="int", Description="The current value of InstanceSeed that the device has stored. If InstanceCounterLastValue has gone over 99999, this will contain a new seed value for the device.", IsRequired=true, Name="InstanceSeed", ParameterType="query")
instance_seed: int = 0
"""
The current value of InstanceSeed that the device has stored. If InstanceCounterLastValue has gone over 99999, this will contain a new seed value for the device.
"""
# @ApiMember(DataType="int", Description="The current value of InstanceCounterLastValue that the device has stored", IsRequired=true, Name="InstanceCounterLastValue", ParameterType="query")
instance_counter_last_value: int = 0
"""
The current value of InstanceCounterLastValue that the device has stored
"""
# @ApiMember(DataType="ResponseStatus", Description="ServiceStack ResponseStatus.", Name="ResponseStatus", ParameterType="query")
response_status: Optional[ResponseStatus] = None
"""
ServiceStack ResponseStatus.
"""
# @Api(Description="Saves/Updates a Devices details and registers that device with an appliance.")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RegisterDevice:
"""
Saves/Updates a Devices details and registers that device with an appliance.
"""
# @ApiMember(DataType="Guid", Description="Guid of the Appliance this Device is Registering under.", IsRequired=true, Name="ApplianceId", ParameterType="query")
appliance_id: Optional[str] = None
"""
Guid of the Appliance this Device is Registering under.
"""
# @ApiMember(DataType="Guid", Description="Guid of the Device. If empty the Device will be inserted, if provided the device will be updated.", IsRequired=true, Name="DeviceId", ParameterType="query")
device_id: Optional[str] = None
"""
Guid of the Device. If empty the Device will be inserted, if provided the device will be updated.
"""
# @ApiMember(DataType="string", Description="The Device manufacturers number.", Name="ManufacturerDeviceNumber", ParameterType="query")
manufacturer_device_number: Optional[str] = None
"""
The Device manufacturers number.
"""
# @ApiMember(DataType="string", Description="The Device MAC Address.", Name="MacAddress", ParameterType="query")
mac_address: Optional[str] = None
"""
The Device MAC Address.
"""
# @ApiMember(DataType="string", Description="The Device Model Name.", IsRequired=true, Name="ModelName", ParameterType="query")
model_name: Optional[str] = None
"""
The Device Model Name.
"""
# @ApiMember(DataType="string", Description="The Device Form, e.g Phone | Tablet.", IsRequired=true, Name="FormFactor", ParameterType="query")
form_factor: Optional[str] = None
"""
The Device Form, e.g Phone | Tablet.
"""
# @ApiMember(DataType="string", Description="The Device Brand.", Name="Brand", ParameterType="query")
brand: Optional[str] = None
"""
The Device Brand.
"""
# @ApiMember(DataType="string", Description="The Device Dimensions (Height x Width x Depth).", Name="Dimensions", ParameterType="query")
dimensions: Optional[str] = None
"""
The Device Dimensions (Height x Width x Depth).
"""
# @ApiMember(DataType="int", Description="The Device display resolution width in pixels.", Name="DisplayResolutionWidthPixels", ParameterType="query")
display_resolution_width_pixels: Optional[int] = None
"""
The Device display resolution width in pixels.
"""
# @ApiMember(DataType="int", Description="The Device display resolution height in pixels.", Name="DisplayResolutionHeightPixels", ParameterType="query")
display_resolution_height_pixels: Optional[int] = None
"""
The Device display resolution height in pixels.
"""
# @ApiMember(DataType="decimal", Description="The Device display width size in inches.", Name="DisplaySizeWidthInches", ParameterType="query")
display_size_width_inches: Optional[Decimal] = None
"""
The Device display width size in inches.
"""
# @ApiMember(DataType="decimal", Description="The Device display height size in inches.", Name="DisplaySizeHeightInches", ParameterType="query")
display_size_height_inches: Optional[Decimal] = None
"""
The Device display height size in inches.
"""
# @ApiMember(DataType="string", Description="The Device operating system.", Name="OperatingSystem", ParameterType="query")
operating_system: Optional[str] = None
"""
The Device operating system.
"""
# @ApiMember(DataType="string", Description="The Device operating system version.", Name="OperatingSystemVersion", ParameterType="query")
operating_system_version: Optional[str] = None
"""
The Device operating system version.
"""
# @ApiMember(DataType="string", Description="The Device IP Address.", Name="IpAddress", ParameterType="query")
ip_address: Optional[str] = None
"""
The Device IP Address.
"""
# @ApiMember(DataType="string", Description="Any Notes about the device.", Name="Notes", ParameterType="query")
notes: Optional[str] = None
"""
Any Notes about the device.
"""
# @ApiMember(DataType="string", Description="Total memory size available (in bytes).", Name="TotalMemorySize", ParameterType="query")
total_memory_size: Optional[int] = None
"""
Total memory size available (in bytes).
"""
# @ApiMember(DataType="string", Description="The Network provider name.", Name="CellularProviderName", ParameterType="query")
cellular_provider_name: Optional[str] = None
"""
The Network provider name.
"""
# @ApiMember(DataType="string", Description="The ISO Country Code of the country the device is currently located in.", Name="ISOCountryCode", ParameterType="query")
iso_country_code: Optional[str] = None
"""
The ISO Country Code of the country the device is currently located in.
"""
# @ApiMember(DataType="string", Description="The Mobile Country Code the device is currently located in.", Name="MobileCountryCode", ParameterType="query")
mobile_country_code: Optional[str] = None
"""
The Mobile Country Code the device is currently located in.
"""
# @ApiMember(DataType="string", Description="The Mobile Network Code the device is currently using.", Name="MobileNetworkCode", ParameterType="query")
mobile_network_code: Optional[str] = None
"""
The Mobile Network Code the device is currently using.
"""
# @ApiMember(DataType="string", Description="The Language Code Identifier that represents the language used on the device.", Name="LanguageCodeIdentifier", ParameterType="query")
language_code_identifier: Optional[str] = None
"""
The Language Code Identifier that represents the language used on the device.
"""
# @ApiMember(DataType="string", Description="The name of the Timezone the device was last used in.", Name="LastKnownTimeZone", ParameterType="query")
last_known_time_zone: Optional[str] = None
"""
The name of the Timezone the device was last used in.
"""
# @ApiMember(DataType="string", Description="The UTC Offset of the Timezone the device was last used in. Formatted as +-##:##", Name="LastKnownTimeZoneOffset", ParameterType="query")
last_known_time_zone_offset: Optional[str] = None
"""
The UTC Offset of the Timezone the device was last used in. Formatted as +-##:##
"""
# @ApiMember(DataType="double", Description="The latitude the device was last located at.", IsRequired=true, Name="Latitude", ParameterType="query")
latitude: float = 0.0
"""
The latitude the device was last located at.
"""
# @ApiMember(DataType="double", Description="The longitude the device was last located at.", IsRequired=true, Name="Longitude", ParameterType="query")
longitude: float = 0.0
"""
The longitude the device was last located at.
"""
# @ApiMember(DataType="int", Description="The current value of InstanceSeed that the device has stored.", IsRequired=true, Name="InstanceSeed", ParameterType="query")
instance_seed: int = 0
"""
The current value of InstanceSeed that the device has stored.
"""
# @ApiMember(DataType="int", Description="The current value of InstanceCounterLastValue that the device has stored", IsRequired=true, Name="InstanceCounterLastValue", ParameterType="query")
instance_counter_last_value: int = 0
"""
The current value of InstanceCounterLastValue that the device has stored
"""
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /jsv/reply/RegisterDevice HTTP/1.1
Host: pfapi.pstpf.com.au
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
ManufacturerDeviceNumber: String,
MacAddress: String,
ModelName: String,
FormFactor: String,
Brand: String,
Dimensions: String,
DisplayResolutionWidthPixels: 0,
DisplayResolutionHeightPixels: 0,
DisplaySizeWidthInches: 0,
DisplaySizeHeightInches: 0,
OperatingSystem: String,
OperatingSystemVersion: String,
IpAddress: String,
Notes: String,
TotalMemorySize: 0,
CellularProviderName: String,
ISOCountryCode: String,
MobileCountryCode: String,
MobileNetworkCode: String,
LanguageCodeIdentifier: String,
LastKnownTimeZone: String,
LastKnownTimeZoneOffset: String,
Latitude: 0,
Longitude: 0,
InstanceSeed: 0,
InstanceCounterLastValue: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
DeviceType:
{
DeviceClassName: String,
Brand: String,
ModelName: String,
FormFactor: String,
Dimensions: String,
DisplayResolutionWidthPixels: 0,
DisplayResolutionHeightPixels: 0,
DisplaySizeWidthInches: 0,
DisplaySizeHeightInches: 0
},
CurrentHistory:
{
DeviceName: String,
OperatingSystem: String,
OperatingSystemVersion: String,
IpAddress: String,
Notes: String,
TotalMemorySize: 0,
CellularProviderName: String,
MobileCountryCode: String,
MobileNetworkCode: String,
LanguageCodeIdentifier: String,
Latitude: 0,
Longitude: 0
},
ModelName: String,
ModelNumber: String,
SerialNumber: String,
ManufacturerDeviceNumber: String,
MacAddress: String,
InstanceSeed: 0,
InstanceCounterLastValue: 0,
ResponseStatus:
{
ErrorCode: String,
Message: String,
StackTrace: String,
Errors:
[
{
ErrorCode: String,
FieldName: String,
Message: String,
Meta:
{
String: String
}
}
],
Meta:
{
String: String
}
}
}