"""
DO NOT MODIFY THIS FILE. {# Unless you see this comment, in which case you are modifying the template. #} It is automatically generated by Stinger-IPC {{generator.version}} and changes will be over-written
on the next generation.

LICENSE: This generated code is not subject to any license restrictions from the generator itself.
TODO: Get license text from stinger file
"""

{%if not config.properties.stinger_owned_values%}
from typing import Callable, Optional
{%endif%}
from typing import List
from pydantic import BaseModel
from .interface_types import *

{%if stinger.properties | length > 0 %}

class {{stinger.name|UpperCamelCase}}InitialPropertyValues(BaseModel):
    """ This class holds all the initial property values for the {{stinger.name}} interface.
    {%if not config.properties.stinger_owned_values%}Since the application owns property values, this is only used for testing.{%endif%}
    """
    {%for prop_name, prop in stinger.properties.items()%}
    {{prop_name | snake_case}}: {{prop.python_annotation}}
    {{prop_name | snake_case}}_version: int = 0
    {%endfor%}
{%if not config.properties.stinger_owned_values%}
class {{stinger.name|UpperCamelCase}}PropertyAccess(BaseModel):
    """ This class holds all the ways to get and set the properties for the {{stinger.name}} interface.
    """
    {%for prop_name, prop in stinger.properties.items()-%}
    {{prop_name | snake_case}}_getter: Callable[[], {{prop.python_annotation}}]
    {%if not prop.read_only-%}
    {{prop_name | snake_case}}_setter: Callable[[{{prop.python_annotation}}], None]
    {%endif-%}
    {%endfor%}
{%endif%}
{%endif%}
