Skip to content

Description

Control Panel is used as an entry point to ECS storages and runner.

API

Meta

Source code in encosy/storage/meta.py
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
class SystemStorageMeta(metaclass=ABCMeta):
    @abstractmethod
    def query(self, *args, **kwargs):
        """
        Return system by any query

        Args:
            *args: positional
            **kwargs: keyword

        Returns:
            systems

        """
        pass

    @abstractmethod
    def add(self, system):
        """
        Add systems

        Args:
            system: any callable

        Returns:
            self

        """
        pass

    @abstractmethod
    def remove(self, system):
        """
        Remove system

        Args:
            system: any callable

        Returns:
            self

        """
        pass

    @abstractmethod
    def get_all(self):
        """
        List of systems

        Returns:
            list of systems

        """
        pass

    @abstractmethod
    def get(self, system):
        """
        Get system config by callable

        Args:
            system: any callable

        Returns:
            system config

        """
        pass

add(system) abstractmethod

Add systems

Parameters:

Name Type Description Default
system

any callable

required

Returns:

Type Description

self

Source code in encosy/storage/meta.py
151
152
153
154
155
156
157
158
159
160
161
162
163
@abstractmethod
def add(self, system):
    """
    Add systems

    Args:
        system: any callable

    Returns:
        self

    """
    pass

get(system) abstractmethod

Get system config by callable

Parameters:

Name Type Description Default
system

any callable

required

Returns:

Type Description

system config

Source code in encosy/storage/meta.py
190
191
192
193
194
195
196
197
198
199
200
201
202
@abstractmethod
def get(self, system):
    """
    Get system config by callable

    Args:
        system: any callable

    Returns:
        system config

    """
    pass

get_all() abstractmethod

List of systems

Returns:

Type Description

list of systems

Source code in encosy/storage/meta.py
179
180
181
182
183
184
185
186
187
188
@abstractmethod
def get_all(self):
    """
    List of systems

    Returns:
        list of systems

    """
    pass

query(*args, **kwargs) abstractmethod

Return system by any query

Parameters:

Name Type Description Default
*args

positional

()
**kwargs

keyword

{}

Returns:

Type Description

systems

Source code in encosy/storage/meta.py
136
137
138
139
140
141
142
143
144
145
146
147
148
149
@abstractmethod
def query(self, *args, **kwargs):
    """
    Return system by any query

    Args:
        *args: positional
        **kwargs: keyword

    Returns:
        systems

    """
    pass

remove(system) abstractmethod

Remove system

Parameters:

Name Type Description Default
system

any callable

required

Returns:

Type Description

self

Source code in encosy/storage/meta.py
165
166
167
168
169
170
171
172
173
174
175
176
177
@abstractmethod
def remove(self, system):
    """
    Remove system

    Args:
        system: any callable

    Returns:
        self

    """
    pass

SystemStorage

SimpleSystemStorage

Bases: SystemStorageMeta

Source code in encosy/storage/system_storage.py
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
class SimpleSystemStorage(SystemStorageMeta):
    def __init__(self):
        self.systems: dict[Callable[[Any], Any], SystemConfig] = {}

    @staticmethod
    def process_types(*args) -> set:
        """
        Simple static function to create set of types

        Args:
            *args: any

        Returns:
            set of types in args

        """
        types = set()
        for type_ in args:
            types.add(type_)
        return types

    def add(self, system: Callable[[Any], Any]) -> 'SimpleSystemStorage':
        """
        Add system to storage and parse with process_system_arguments

        Args:
            system: any callable for ECS

        Returns:
            self

        """
        self.systems[system] = process_system_arguments(system)
        return self

    def remove(self, system: Callable[[Any], Any]) -> 'SimpleSystemStorage':
        """
        Remove system by its callable

        Args:
            system: any callable

        Returns:
            self

        """
        self.systems.pop(system)
        return self

    def query(self, *args: type) -> list[Callable]:
        """
        Query system by its arguments types

        Args:
            *args: types of system input

        Returns:
            list of existing functions

        """
        types = SimpleSystemStorage.process_types(*args)
        return [
            system_config.callable
            for system_config in self.systems.values()
            if types <= system_config.types
        ]

    def get(self, system: Callable[[Any], Any]) -> SystemConfig:
        """
        Get parsed system by callable

        Args:
            system: any callable

        Returns:
            config of the system

        """
        return self.systems[system]

    def get_all(self):
        return self.systems.values()

    def __len__(self):
        return len(self.systems)

add(system)

Add system to storage and parse with process_system_arguments

Parameters:

Name Type Description Default
system Callable[[Any], Any]

any callable for ECS

required

Returns:

Type Description
SimpleSystemStorage

self

Source code in encosy/storage/system_storage.py
54
55
56
57
58
59
60
61
62
63
64
65
66
def add(self, system: Callable[[Any], Any]) -> 'SimpleSystemStorage':
    """
    Add system to storage and parse with process_system_arguments

    Args:
        system: any callable for ECS

    Returns:
        self

    """
    self.systems[system] = process_system_arguments(system)
    return self

get(system)

Get parsed system by callable

Parameters:

Name Type Description Default
system Callable[[Any], Any]

any callable

required

Returns:

Type Description
SystemConfig

config of the system

Source code in encosy/storage/system_storage.py
100
101
102
103
104
105
106
107
108
109
110
111
def get(self, system: Callable[[Any], Any]) -> SystemConfig:
    """
    Get parsed system by callable

    Args:
        system: any callable

    Returns:
        config of the system

    """
    return self.systems[system]

process_types(*args) staticmethod

Simple static function to create set of types

Parameters:

Name Type Description Default
*args

any

()

Returns:

Type Description
set

set of types in args

Source code in encosy/storage/system_storage.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@staticmethod
def process_types(*args) -> set:
    """
    Simple static function to create set of types

    Args:
        *args: any

    Returns:
        set of types in args

    """
    types = set()
    for type_ in args:
        types.add(type_)
    return types

query(*args)

Query system by its arguments types

Parameters:

Name Type Description Default
*args type

types of system input

()

Returns:

Type Description
list[Callable]

list of existing functions

Source code in encosy/storage/system_storage.py
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
def query(self, *args: type) -> list[Callable]:
    """
    Query system by its arguments types

    Args:
        *args: types of system input

    Returns:
        list of existing functions

    """
    types = SimpleSystemStorage.process_types(*args)
    return [
        system_config.callable
        for system_config in self.systems.values()
        if types <= system_config.types
    ]

remove(system)

Remove system by its callable

Parameters:

Name Type Description Default
system Callable[[Any], Any]

any callable

required

Returns:

Type Description
SimpleSystemStorage

self

Source code in encosy/storage/system_storage.py
68
69
70
71
72
73
74
75
76
77
78
79
80
def remove(self, system: Callable[[Any], Any]) -> 'SimpleSystemStorage':
    """
    Remove system by its callable

    Args:
        system: any callable

    Returns:
        self

    """
    self.systems.pop(system)
    return self

process_system_arguments(system)

Simple function to create system configuration using annotations and get_attr -> origin

Parameters:

Name Type Description Default
system Callable[[Any], Any]

any callable

required

Returns:

Type Description
SystemConfig

parsed system

Source code in encosy/storage/system_storage.py
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def process_system_arguments(system: Callable[[Any], Any]) -> SystemConfig:
    """
    Simple function to create system configuration using __annotations__
    and get_attr -> __origin__

    Args:
        system: any callable

    Returns:
        parsed system

    """
    system_conf = SystemConfig(
        callable=system, commands={}, resources={}, components={}, types=set()
    )
    for name, annotation in system.__annotations__.items():
        if annotation is Commands:
            system_conf.commands[annotation] = name
        elif getattr(annotation, "__origin__", None) is Entities:
            system_conf.components[annotation.__args__] = name
        else:
            system_conf.resources[annotation] = name
        system_conf.types.add(annotation)
    return system_conf