Module lib.webpage.presencepage

Function define the web page to configure the presence detection

Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
""" Function define the web page to configure the presence detection """
# pylint:disable=consider-using-enumerate
import server.httpserver
import server.dnsclient
import server.presence
from htmltemplate      import *
import webpage.mainpage
import wifi.wifi
import tools.lang
import tools.strings
import tools.features

@server.httpserver.HttpServer.add_route(b'/presence', menu=tools.lang.menu_server, item=tools.lang.item_presence, available=tools.features.features.presence)
async def presence(request, response, args):
        """ Presence configuration page """
        config = server.presence.PresenceConfig()
        def update_config(request, config):
                resolve = False
                if b"resolve" in request.params:
                        if request.params[b"resolve"] != b"0":
                                resolve = True

                if resolve:
                        ip_address, netmask, gateway, dns = wifi.station.Station.get_info()
                        if dns != "":
                                for i in range(len(config.smartphones)):
                                        smartphone = config.smartphones[i]
                                        try:
                                                if server.dnsclient.is_ip_address(tools.strings.tostrings(smartphone)):
                                                        hostname = server.dnsclient.resolve_hostname(dns, tools.strings.tostrings(smartphone))
                                                        if hostname is not None:
                                                                config.smartphones[i] = tools.strings.tobytes(hostname)
                                        except:
                                                        pass

        disabled, action, submit = webpage.mainpage.manage_default_button(request, config, update_config)
        if action == b'modify':
                submit = Switch(text=tools.lang.convert_ip_address, name=b"resolve", checked=False, disabled=disabled),submit

        editSmartphones = []
        i = 0
        for smartphone in config.smartphones:
                editSmartphones.append(Edit(text=tools.lang.smartphone_d%(i+1),         name=b"smartphones[%d]"%i,
                                                                placeholder=tools.lang.enter_ip_address_or_dns,
                                                                value=tools.strings.tobytes(config.smartphones[i]),  disabled=disabled))
                i += 1

        page = webpage.mainpage.main_frame(request, response, args,tools.lang.presence_detection_configuration,
                Form([
                        Switch(text=tools.lang.activated, name=b"activated", checked=config.activated, disabled=disabled),
                        editSmartphones,
                        Switch(text=tools.lang.notification, name=b"notify", checked=config.notify, disabled=disabled),
                        submit
                ]))

        await response.send_page(page)

Functions

async def presence(request, response, args)

Presence configuration page

Expand source code
@server.httpserver.HttpServer.add_route(b'/presence', menu=tools.lang.menu_server, item=tools.lang.item_presence, available=tools.features.features.presence)
async def presence(request, response, args):
        """ Presence configuration page """
        config = server.presence.PresenceConfig()
        def update_config(request, config):
                resolve = False
                if b"resolve" in request.params:
                        if request.params[b"resolve"] != b"0":
                                resolve = True

                if resolve:
                        ip_address, netmask, gateway, dns = wifi.station.Station.get_info()
                        if dns != "":
                                for i in range(len(config.smartphones)):
                                        smartphone = config.smartphones[i]
                                        try:
                                                if server.dnsclient.is_ip_address(tools.strings.tostrings(smartphone)):
                                                        hostname = server.dnsclient.resolve_hostname(dns, tools.strings.tostrings(smartphone))
                                                        if hostname is not None:
                                                                config.smartphones[i] = tools.strings.tobytes(hostname)
                                        except:
                                                        pass

        disabled, action, submit = webpage.mainpage.manage_default_button(request, config, update_config)
        if action == b'modify':
                submit = Switch(text=tools.lang.convert_ip_address, name=b"resolve", checked=False, disabled=disabled),submit

        editSmartphones = []
        i = 0
        for smartphone in config.smartphones:
                editSmartphones.append(Edit(text=tools.lang.smartphone_d%(i+1),         name=b"smartphones[%d]"%i,
                                                                placeholder=tools.lang.enter_ip_address_or_dns,
                                                                value=tools.strings.tobytes(config.smartphones[i]),  disabled=disabled))
                i += 1

        page = webpage.mainpage.main_frame(request, response, args,tools.lang.presence_detection_configuration,
                Form([
                        Switch(text=tools.lang.activated, name=b"activated", checked=config.activated, disabled=disabled),
                        editSmartphones,
                        Switch(text=tools.lang.notification, name=b"notify", checked=config.notify, disabled=disabled),
                        submit
                ]))

        await response.send_page(page)