Device

from mstrio.distribution_services import (
    BackupPrinterProperties,
    ConnectionParameters,
    Device,
    DeviceType,
    EmailDeviceProperties,
    EmailFormat,
    EmailSmartHostSettings,
    FileDeviceProperties,
    FileLocation,
    FileProperties,
    FileSystem,
    IOSDeviceProperties,
    list_devices,
    PrinterDeviceProperties,
    PrinterLocation,
    PrinterProperties,
    PrinterPdfSettings,
    Transmitter,
    UnixWindowsSharity
)
from mstrio.connection import get_connection

PROJECT_NAME = '<Project_name>'  # Project to connect to
SMART_HOST_SERVER = '<example.com>'  # server name for smart host
SMART_HOST_PORT = 22  # server port for smart host
FEEDBACK_SERVICE_SERVER = '<Service_name>'  # server name for ios feedback server
FEEDBACK_SERVICE_PORT = 1212  # server port for ios feedback server
FILE_DEVICE_PATH = 'path/to/file'  # path for file device
PRINTER_LOCATION = '<Printer_location>'  # printer location field for printer device properties
TRANSMITTER_ID = '<Transmitter_id>'  # id for Transmitter object
DEVICE_ID = '<Device_id>'  # id for Device object
DEVICE_NAME = '<Name_of_device>'
DEVICE_DESCRIPTION = '<Description_of_device>'

conn = get_connection(workstationData, project_name=PROJECT_NAME)

# create email device properties object
# which is used when creating device
edp = EmailDeviceProperties(
    format=EmailFormat.UU_ENCODED,
    smart_host_settings=EmailSmartHostSettings(server=SMART_HOST_SERVER, port=SMART_HOST_PORT),
)
# see distribution_services/device/device_properties.py for EmailFormat values

# create ios device properties object
# which is used when creating iphone or ipad device
idp = IOSDeviceProperties(
    app_id='com.microstrategy.dossier.iphone',
    server='api.push.apple.com',
    port=443,
    feedback_service_server=FEEDBACK_SERVICE_SERVER,
    feedback_service_port=FEEDBACK_SERVICE_PORT,
)

# create file device properties object
# which is used when creating file device
file_location = FileLocation(file_path=FILE_DEVICE_PATH)
file_system = FileSystem(create_folder=False)
fp = FileDeviceProperties(
    file_location=file_location,
    file_system=file_system,
    connection_parameters=ConnectionParameters(retries_count=6),
    file_properties=FileProperties(read_only=False),
    unix_windows_sharity=UnixWindowsSharity(sharity_enabled=False),
)

# create print device properties object
# which is used when creating print device
printer_properties = PrinterProperties(pdf_setting=PrinterPdfSettings(post_script_level=1))
pdp = PrinterDeviceProperties(
    printer_location=PrinterLocation(location=PRINTER_LOCATION),
    printer_properties=printer_properties,
    connection_parameters=ConnectionParameters(retries_count=6),
    backup_printer_properties=BackupPrinterProperties(print_on_backup=True),
)
# get transmitters by id
transmitter = Transmitter(conn, id=TRANSMITTER_ID)

# create a device with device type as `email` (when type is `email` then
# it is mandatory to provide `email_device_properties`)
new_email_device = Device.create(
    connection=conn,
    name=DEVICE_NAME,
    # the DeviceType values can be found in distribution_services/device/device.py
    device_type=DeviceType.EMAIL,
    description=DEVICE_DESCRIPTION,
    transmitter=transmitter,
    device_properties=edp,
)
# create a device with device type as `iphone` (when type is `iphone` then
# it is mandatory to provide `device_properties`). Device type
# can be also passed as a string and `device_properties` can be
# passed as a dictionary
new_iphone_device = Device.create(
    connection=conn,
    name=DEVICE_NAME,
    # the DeviceType values can be found in distribution_services/device/device.py
    device_type=DeviceType.IPHONE,
    description=DEVICE_DESCRIPTION,
    transmitter=transmitter,
    device_properties=idp,
)

# create a device with device type as `ipad`
new_ipad_device = Device.create(
    connection=conn,
    name=DEVICE_NAME,
    # the DeviceType values can be found in distribution_services/device/device.py
    device_type=DeviceType.IPAD,
    description=DEVICE_DESCRIPTION,
    transmitter=transmitter,
    device_properties=idp,
)

# create a device with device type as `file`
new_file_device = Device.create(
    connection=conn,
    name=DEVICE_NAME,
    # the DeviceType values can be found in distribution_services/device/device.py
    device_type=DeviceType.FILE,
    description=DEVICE_DESCRIPTION,
    transmitter=transmitter,
    device_properties=fp,
)

# create a device with device type as `printer`
new_printer_device = Device.create(
    connection=conn,
    name=DEVICE_NAME,
    # the DeviceType values can be found in distribution_services/device/device.py
    device_type=DeviceType.PRINTER,
    description=DEVICE_DESCRIPTION,
    transmitter=transmitter,
    device_properties=pdp,
)

# get list of devices
print(list_devices(conn))

# get device by ID. Device can be also found by its name.
device = Device(conn, id=DEVICE_ID)
device_by_name = Device(conn, name=DEVICE_NAME)

# alter email type device and its properties
edp.smart_host_settings.server = 'microstrategy.com'
edp.smart_host_settings.port = 21
new_email_device.alter(
    name=DEVICE_NAME,
    description=DEVICE_DESCRIPTION,
    device_properties=edp,
)

# list device properties
device.list_properties()

# Delete device. When argument `force` is set to `False` (default value),
# then deletion must be confirmed by selecting appropriate prompt value.
new_email_device.delete(force=True)
new_iphone_device.delete(force=True)