Source code for py3dtiles.tilers.base_tiler.tiler_worker
from abc import ABC, abstractmethod
from collections.abc import Iterator, Sequence
from typing import Generic, TypeVar
from py3dtiles.tilers.base_tiler.shared_metadata import SharedMetadata
_SharedMetadataT = TypeVar("_SharedMetadataT", bound=SharedMetadata)
[docs]
class TilerWorker(ABC, Generic[_SharedMetadataT]):
def __init__(self, shared_metadata: _SharedMetadataT):
# The attribute shared_metadata must not be modified by any tiler worker
self.shared_metadata = shared_metadata
[docs]
@abstractmethod
def execute(
self, command: bytes, content: list[bytes]
) -> Iterator[Sequence[bytes]]:
"""
Executes a command sent by the tiler. Each sequence of bytes returned by the returned Iterator will be sent back to the corresponding tiler.
The easiest way to do so is to ``yield`` the Sequence to be sent. This
will automatically turn the method into a generator, which is
incidentally an Iterator. This has the good additional side-effect of
passing back control to the calling method, which will in turn send the
message immediately, without waiting for this method to be executed.
Implementing classes can use any message format they like provided it
is a Sequence of bytes. The only restriction is that the first element
of the sequence should **not** be a value in the
:class:`py3dtiles.tilers.base_tiler.message_type.WorkerMessageType`
enum, as those are used internally by the convert process to manage
the lifecycles of the different entities.
"""